object.presence의 포인트는 무엇입니까?
Rails 문서 에서 메소드 에 대해 제공된 예제object.presence
는 다음과 같습니다.
region = params[:state].presence || params[:country].presence || 'US'
그러나 다음과 같은 것은 아닙니다.
region = params[:state] || params[:country] || 'US'
사용의 요점은 무엇입니까 presence
?
요점은 다음과 같습니다.
''.presence
# => nil
그래서 만약 params[:state] == ''
:
region = params[:state].presence || 'US'
# => 'US'
region = params[:state] || 'US'
# => ''
또한 메서드에 nil
응답하는 모든 개체 에서 유사한 방식으로 작동합니다 (즉, 개체가 '비어있는 경우' 반환 ). empty?
예를 들면 다음과 같습니다.
[].presence
# => nil
다음은 참고 용 문서입니다.
http://api.rubyonrails.org/classes/Object.html#method-i-presence
내가 깔끔하게 찾은 유용한 방법으로 사용했습니다. 내 변수는 문자열이고, 빈 문자열이면 nil을, 그렇지 않으면 정수로 변환하고 싶습니다.
x.presence.try(&:to_i)
"".presence.try(&:to_i) # => nil
"22".presence.try(&:to_i) # => 22
presence
nil
객체가 없으면 반환 하고 객체가 있으면 객체 자체 를 반환하려는 경우 매우 유용합니다 . 즉, 다음과 같은 코드가 필요합니다.
object.present? object : nil
위의 줄 대신 단순히 호출 할 수 있으며 object.presence
메서드가 작업을 수행합니다.
또 다른 예로, presence
제가 가장 좋아하는 FizzBuzz 솔루션을 소개 하겠습니다 .
puts 1.upto(100).map { |n| "#{'Fizz' if n%3==0}#{'Buzz' if n%5==0}".presence || n }
사용의 실제 지점 #presence
이 있다는 것입니다 확장 의 개념 falsey 값을 웹 및 HTTP 시나리오를 처리 할 수 있습니다. 문서는이 목적을 명확하게하지 않습니다 ... 대신 단순히 메소드의 API에 초점을 맞추고 있습니다. The what but not the why . 웹과 HTTP는 일반 프로그래밍과 다릅니다. 빈 문자열은 종종 nil
요청 대신에 얻는 것이기 때문 입니다.
그러나 일반 Ruby에서는 빈 문자열이 진실 입니다. 이로 인해 웹 개발자 Object.presence
는 여기에 다른 사람들이 인용 한 것처럼 예제로 사용 하기 위해 문서와 같은 중복 된 상용구 코드를 많이 작성합니다 .
레일에서 웹 응용 프로그램을 작성하는 사람들을위한 결론은 우리가 지금 사용 (해야) 할 수 있다는 것입니다 #present?
및 #presence
표준 루비 합선으로 ||
:
# Check for a param like this
@name = params[:name].presence || 'No name given'
이 줄은 웹 서버 request
가 우리 를 위해 매개 변수에 포장하는 모든 것을 적절하게 처리합니다 . 이 평범한 오래된 루비는 그렇지 않습니다.
# DON'T DO THIS
@name = params[:name] || 'No name given'
참조 URL : https://stackoverflow.com/questions/19637499/what-is-the-point-of-object-presence
'IT이야기' 카테고리의 다른 글
Hg에서 한 지점으로만 푸시하는 방법 (0) | 2021.04.22 |
---|---|
매번 열리는 성능 탐색기 비활성화 (0) | 2021.04.22 |
for 루프 다중 처리 (0) | 2021.04.22 |
jQuery datepicker- 2 개의 입력 / 텍스트 상자 및 제한 범위 (0) | 2021.04.21 |
Rails 기능 테스트에서 원시 포스트 데이터를 보내는 방법 (0) | 2021.04.21 |