programing

루비 객체가 부울 객체인지 확인하는 방법

css3 2023. 6. 4. 22:29

루비 객체가 부울 객체인지 확인하는 방법

나는 객체가 부울인지 쉽게 확인할 수 없는 것 같습니다.루비에도 이런 게 있나요?

true.is_a?(Boolean)
false.is_a?(Boolean)

지금 이 작업을 수행하고 있으며 단축하고 싶습니다.

some_var = rand(1) == 1 ? true : false
(some_var.is_a?(TrueClass) || some_var.is_a?(FalseClass))

내가 생각할 수 있는 가장 간단한 방법은:

# checking whether foo is a boolean
!!foo == foo

저는 이것이 간결하고 자기 문서화라고 생각합니다.

[true, false].include? foo

Rails 또는 ActiveSupport를 사용하는 경우 다음을 사용하여 직접 쿼리를 수행할 수도 있습니다.

foo.in? [true, false]

가능한 모든 값을 확인하는 것은 플로트에 권장되는 것은 아니지만 가능한 값이 두 개뿐일 때 실현 가능합니다!

거기에는 없다Boolean루비의 수업, 확인할 수 있는 유일한 방법은 당신이 하고 있는 것을 하는 것입니다(객체와 비교).true그리고.false또는 에 대한 객체의 클래스TrueClass그리고.FalseClass). 하지만 왜 이 기능이 필요한지는 생각할 수 없습니다. 설명해 주시겠습니까?:)

하지만 이 기능이 정말로 필요하다면 다음과 같이 해킹할 수 있습니다.

module Boolean; end
class TrueClass; include Boolean; end
class FalseClass; include Boolean; end

true.is_a?(Boolean) #=> true
false.is_a?(Boolean) #=> true

위에서 설명한 바와 같이 TrueClass와 FalseClass만 있는 부울 클래스는 없지만, if/except 및 falseClass의 인스턴스를 제외한 모든 항목이 참인 경우의 주체로 모든 개체를 사용할 수 있습니다.

부울 테스트는 FalseClass 또는 TrueClass의 인스턴스를 반환합니다.

(1 > 0).class #TrueClass

개체에 대한 다음 원숭이 패치는 어떤 개체가 TrueClass 또는 FalseClass의 인스턴스인지 여부를 알려줍니다.

class Object
  def boolean?
    self.is_a?(TrueClass) || self.is_a?(FalseClass) 
  end
end

irb를 사용하여 일부 테스트를 실행하면 다음과 같은 결과가 나타납니다.

?> "String".boolean?
=> false
>> 1.boolean?
=> false
>> Time.now.boolean?
=> false
>> nil.boolean?
=> false
>> true.boolean?
=> true
>> false.boolean?
=> true
>> (1 ==1).boolean?
=> true
>> (1 ==2).boolean?
=> true

코드를 사례 진술로 합리적으로 작성할 수 있다면, 이것은 꽤 괜찮은 것입니다.

case mybool
when TrueClass, FalseClass
  puts "It's a bool!"
else
  puts "It's something else!"
end

부울 객체는 TrueClass 또는 FalseClass 클래스를 가지고 있으므로 다음의 한 줄자가 트릭을 수행해야 합니다.

mybool = true
mybool.class == TrueClass || mybool.class == FalseClass
=> true

다음은 참/거짓 부울 유형 점검 결과도 제공합니다.

mybool = true    
[TrueClass, FalseClass].include?(mybool.class)
=> true

그러니 한번 해보세요.(x == true) ^ (x == false)참고로 괄호가 필요하지만 이것은 더 아름답고 압축적입니다.

심지어 "쿠악"처럼 제안을 통과하지만 "쿠악"은 통과하지 않습니다. class X; def !; self end end ; x = X.new; (x == true) ^ (x == false)

참고: 이것은 매우 기본적이어서 다른 언어로도 사용할 수 있지만 "불리언"은 제공하지 않습니다.

참고 2: 또한 이것을 사용하여 사물이 그 중 하나라고 말할 수 있습니까?:"red", "green", "blue"네가 만약add more XORS아니면 이것이 그 중 하나라고 말합니까?:4, 5, 8, 35.

이 보석은 유용한 메소드를 사용하여 Ruby에 부울 클래스를 추가합니다.

https://github.com/RISCfuture/boolean

사용:

require 'boolean'

그럼 당신의

true.is_a?(Boolean)
false.is_a?(Boolean)

당신이 기대하는 대로 작동할 것입니다.

아니요, 당신이 코드를 가지고 있는 것과는 다릅니다.Boolean이라는 클래스가 없습니다.이제 여러분이 가지고 있는 모든 답을 가지고 여러분은 하나를 만들고 그것을 사용할 수 있을 것입니다.당신은 수업을 만드는 방법을 알고 있죠?저도 이 생각이 궁금해서 온 것뿐이에요.많은 사람들이 "왜?Ruby가 Boolean을 어떻게 사용하는지 알아야 합니다.그래서 답을 얻으셨군요질문 감사합니다.생각할 거리.왜 루비는 부울 수업이 없나요?

NameError: uninitialized constant Boolean

개체에는 유형이 없습니다.그들은 계급입니다.개체에 데이터가 있습니다.그렇기 때문에 데이터 유형이라고 하면 약간 잘못된 이름입니다.

또한 랜드 1은 항상 0을 주는 것 같기 때문에 랜드 2를 시도합니다. 랜드 2는 여기서 1 또는 0 클릭 실행을 몇 번 할 것입니다.https://repl.it/IOPx/7

비록 제가 직접 부울 수업을 만드는 방법을 알지는 못하겠지만요.실험을 해봤지만...

class Boolean < TrueClass
  self
end

true.is_a?(Boolean) # => false
false.is_a?(Boolean) # => false

적어도 지금은 그 수업이 있지만, 올바른 가치관을 얻는 방법을 아는 사람이 있을까요?

언급URL : https://stackoverflow.com/questions/3028243/how-to-check-if-a-ruby-object-is-a-boolean