code

루비, !!

codestyles 2020. 8. 31. 07:48
반응형

루비, !! 연산자 (a / k / a 더블 뱅) [중복]


중복 가능성 :
무엇을 !! 루비에서 의미합니까?

안녕하세요,

저는 Ruby를 처음 사용하여 "!!"에 대한 설명을 찾을 수 없습니다. 방법.

예를 들면 다음과 같습니다.

def signed_in?
  !!current_user
end

이것이 이중 부정이라면 다음과 같이 말하지 마십시오.

def signed_in?
  current_user
end

도와주세요.


Ruby를 포함한 대부분의 프로그래밍 언어 !에서 피연산자의 부울 값과 반대되는 값을 반환합니다. 따라서 두 개의 느낌표를 함께 연결하면 값이 부울로 변환됩니다.


Ruby (및 기타 여러 언어)에는 true부울 컨텍스트에서 평가되는 많은 값 과 false로 평가되는 소수가 있습니다. 루비에서 평가하는 유일한 두 가지 할 수 false있습니다 false(자체) 및nil .

무언가를 부정하면 부울 컨텍스트가 적용됩니다. 물론 부정하기도합니다. 이중 부정하면 부울 컨텍스트를 강제하지만 적절한 부울 값을 반환합니다.

예를 들면 :

"hello"   #-> this is a string; it is not in a boolean context
!"hello"  #-> this is a string that is forced into a boolean 
          #   context (true), and then negated (false)
!!"hello" #-> this is a string that is forced into a boolean 
          #   context (true), and then negated (false), and then 
          #   negated again (true)
!!nil     #-> this is a false-y value that is forced into a boolean 
          #   context (false), and then negated (true), and then 
          #   negated again (false)

귀하의 예에서 signed_in?메서드는 ?문자 로 규칙에 따라 부울 값을 반환해야합니다 . 이 값을 결정하는 데 사용하는 내부 논리는 current_user변수가 설정 되었는지 확인하는 것입니다. 설정된 경우 true부울 컨텍스트에서로 평가됩니다 . 그렇지 않으면 거짓으로 평가됩니다. 이중 부정은 반환 값이 부울이되도록 강제합니다.


!!그냥 !회 기록 (부정 부울 연산자). 인수를 부정하고 부정을 부정합니다. 모든 값에서 부울을 가져 오는 데 사용할 수 있으므로 유용합니다. 첫 번째는 !, 부울에 예를 인수 변환합니다 true입니다 경우 nilfalse, 그리고 false그렇지. 두 번째는, 인수의 부울 값을 얻을 다시 그래서를 부정합니다 false위해 nil또는 false, true다른 단지에 대한 모든 것을.

Ruby에서는 if명령문에 모든 값을 사용할 수 있습니다 . 예를 들어 if current_user현재 사용자가 nil. 대부분의 경우 이것은 명시 적 테스트 (예 if !current_user.nil?: 최소 6 자 더 긴)를 입력 할 필요가 없기 때문에 훌륭합니다 . 그러나 메서드가 부울을 반환한다는 것을 암시 할 때 객체를 반환하면 때때로 정말 혼란 스러울 수 있습니다. 이름이로 끝나는 메서드는 ?진실 또는 거짓 값을 반환해야합니다. 즉, true또는로 평가되는 것을 반환합니다 false. 그러나 signed_in?사용자 개체를 반환 하면 정말 지저분해질 수 있습니다 . 디버그하려는 경우 예를 들어 일부 코드가 사용하는 것을 왜 signed_in?사용자 개체가 회전 할 때 예상 한 위치에 당신은 아마 정말 혼란을 얻을 것이다 작동하지 않습니다 true또는false. 그 상황에서는 추가하는 것이 유용 !!전과 returntruthy 또는 falsy 값 중 하나를 반환됩니다 보장 그 이후 truefalse.


올바르게 이해했듯이 !연산자 의 이중 음수 사용입니다 . 즉, 변수가 nil 일 수 있는지 여부를 확인하는 간단한 방법 일 수 있지만 IMO는 너무 간결 합니다. 한 번 봐 가지고 게시물을. Ruby에서 nil을 테스트하면 false로 평가됩니다.

참고 URL : https://stackoverflow.com/questions/3994033/ruby-operator-aka-the-double-bang

반응형