programing

루비로!!는 무슨 뜻입니까?

elecom 2023. 6. 12. 21:06
반응형

루비로!!는 무슨 뜻입니까?

그냥 뭐가 궁금할 뿐이에요!!루비에 있습니다.

아닙니다.

값을 부울 값으로 변환하는 데 사용됩니다.

!!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

반응형