루비 객체가 부울 객체인지 확인하는 방법
나는 객체가 부울인지 쉽게 확인할 수 없는 것 같습니다.루비에도 이런 게 있나요?
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
'programing' 카테고리의 다른 글
Java Apache POI Excel PDF로 저장 (0) | 2023.06.04 |
---|---|
Firebase 분석에서 Floatter 화면을 추적하려면 어떻게 해야 합니까? (0) | 2023.06.04 |
설치된 보석 목록? (0) | 2023.06.04 |
콘솔의 같은 위치에 출력을 쓰려면 어떻게 해야 합니까? (0) | 2023.06.04 |
Firebase - ref와 child의 차이점은 무엇입니까? (0) | 2023.06.04 |