루비로!!는 무슨 뜻입니까?
그냥 뭐가 궁금할 뿐이에요!!루비에 있습니다.
아닙니다.
값을 부울 값으로 변환하는 데 사용됩니다.
!!nil #=> false
!!"abc" #=> true
!!false #=> false
Ruby에 대한 유일한 잘못된 값은 다음과 같기 때문에 일반적으로 사용할 필요가 없습니다.nil그리고.false그래서 보통은 그 관습을 그대로 두는 것이 최선입니다.
라고 생각합니다.
!(!some_val)
합법적으로 사용되는 한 가지 방법은 엄청난 양의 데이터가 반환되는 것을 방지하는 것입니다.예를 들어, 3MB의 이미지 데이터를 반환하고 싶지 않을 수 있습니다.has_image?방법, 또는 당신은 당신의 전체 사용자 객체를 반환하고 싶지 않을 수도 있습니다.logged_in?방법.사용.!!이 물체들을 단순한 것으로 변환합니다.true/false.
돌아옵니다true오른쪽에 있는 물체가 그렇지 않으면nil그리고 아닌false,false그렇다면nil또는false
def logged_in?
!!@current_user
end
!평균 부울 상태 부정, 2!s는 이중 부정 외에는 특별한 것이 없습니다.
!true == false
# => true
일반적으로 메서드가 부울을 반환하도록 강제하는 데 사용됩니다.문자열, 정수 및 기타 항목과 같은 모든 종류의 진실성을 감지하여 부울로 변환합니다.
!"wtf"
# => false
!!"wtf"
# => true
보다 실제적인 사용 사례:
def title
"I return a string."
end
def title_exists?
!!title
end
이 기능은 부울이 반환되는지 확인하려는 경우에 유용합니다.임호, 하지만 둘 다 의미가 없어요.if 'some string'그리고.if true동일한 흐름이지만 일부 사용자는 부울을 명시적으로 반환하는 것이 유용하다고 생각합니다.
이 관용구는 다른 프로그래밍 언어에도 존재합니다.C는 본질적인 것이 없었습니다.bool유형, 그래서 모든 부울은 다음과 같이 입력되었습니다.int대신, 표준 값으로0또는1다음 예를 들어보겠습니다(명확하게 하기 위해 괄호 추가).
!(1234) == 0
!(0) == 1
!(!(1234)) == 1
"not-not" 구문은 0이 아닌 정수를 다음으로 변환합니다.1표준 부울 참 값.
하지만 일반적으로, 저는 이 흔하지 않은 관용구를 사용하는 것보다 합리적인 비교를 하는 것이 훨씬 낫다는 것을 알게 되었습니다.
int x = 1234;
if (!!x); // wtf mate
if (x != 0); // obvious
단독 또는 단독으로 해야 할 경우 유용합니다.Matt Van Horn의 답변에서 약간 수정된 내용을 복사합니다.
1 ^ true
TypeError: can't convert true into Integer
!!1 ^ !!true
=> false
두 변수가 모두 0이거나 둘 다 0이 아닌지 확인하기 위해 사용했습니다.
raise "Inconsistency" if !!a ^ !!b
그것은 "이중 음성"이지만, 그 관행은 좌절되고 있습니다.만약 당신이 루보캅을 사용하고 있다면, 당신은 그것이 그러한 코드에 불평하는 것을 볼 것입니다.Style/DoubleNegation위반
근거는 다음과 같습니다.
이는 암호화되지 않은 동시에 일반적으로 중복되므로 [그렇다면 다음과 같이 바꿔 말하면] 변경을 피해야 합니다.
!!something로.!something.nil?
예를 들어, 열거형을 부울식으로 변환해야 하는 경우 작동 방식을 이해하는 것이 유용할 수 있습니다.정확히 그렇게 하는 코드를 가지고 있어요, 사용해요.classy_enum보석:보석:
class LinkStatus < ClassyEnum::Base
def !
return true
end
end
class LinkStatus::No < LinkStatus
end
class LinkStatus::Claimed < LinkStatus
def !
return false
end
end
class LinkStatus::Confirmed < LinkStatus
def !
return false
end
end
class LinkStatus::Denied < LinkStatus
end
서비스 코드에는 다음과 같은 것이 있습니다.
raise Application::Error unless !!object.link_status # => raises exception for "No" and "Denied" states.
사실상 방방 연산자는 to_boole이라는 메서드로 제가 썼을 수도 있는 것이 되었습니다.
다른 답변들은 무엇을 논의했습니다.!!실행 및 실행 여부를 확인합니다.
그러나 어떤 답변도 부울에 값을 캐스팅하는 "표준 루비 방식"을 제공하지 않습니다.
true & variable
TrueClass 값 비루값의의 true는 방법을 합니다.&다음과 같이 문서화되어 있습니다.
온다아를 반환합니다.
false한다면obj이라nil또는false,true그렇지않으면.
표준 라이브러리에서 다루었는데 왜 더러운 이중 네거티브를 사용합니까?
언급URL : https://stackoverflow.com/questions/524658/what-does-mean-in-ruby
'programing' 카테고리의 다른 글
| VS 코드 자동 들여쓰기 / 코드 형식 지정 시 단일 따옴표가 두 배로 변경됨 (0) | 2023.06.12 |
|---|---|
| 클라이언트 컴퓨터에서 자바스크립트를 많이 사용하는 웹 페이지의 성능을 어떻게 측정할 수 있습니까? (0) | 2023.06.12 |
| 스프레드시트에 Infinity가 있습니까? (0) | 2023.06.12 |
| Woocommerce에서 카트에서 무료 제품 자동 추가 또는 제거 (0) | 2023.06.12 |
| 돌연변이 내부의 돌연변이 배열 내보내기.js (0) | 2023.06.12 |