Ruby 객체가 부울인지 확인하는 방법
발견가 부울인지 쉽게 확인할 수 없습니다. Ruby에 이와 같은 시스템이 있습니까?
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를 사용하는 경우 다음을 사용하여 직접 쿼리를 수행 할 수도 있습니다. in?
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 만 부울 클래스는 사용할 수없는 경우, FalseClass 및 nil 인스턴스를 모든 것이 참입니다.
부울 테스트는 FalseClass 또는 TrueClass의 인스턴스를 반환합니다.
(1 > 0).class #TrueClass
다음의 객체에 대한 Monkeypatch는 설명이 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
다음은 또한 true / false 부울 유형 검사 결과를 제공합니다.
mybool = true
[TrueClass, FalseClass].include?(mybool.class)
=> true
그래서이 아웃하려고 (x == true) ^ (x == false)
하면 괄호가 필요하지만 더 아름답고 컴팩트 메모를.
제안 된 "cuak"은 통과하지만 "cuak"은 통과하지 못합니다. class X; def !; self end end ; x = X.new; (x == true) ^ (x == false)
참고 : 이것은 너무 기본적인 것이므로 다른 언어에서도 사용할 수 있으며 "thing is boolean"을 제공하지 않습니다.
참고 2 : 또한 이것을 사용하여 일이 다음 중 하나라고 말할 수 있습니다.? :"red", "green", "blue"
만약 당신이add more XORS
... 또는이 일이 다음 중 하나라고 말할수 있습니다4, 5, 8, 35
.? :.
이 gem은 유용한 메소드와 함께 부울 클래스를 Ruby에 추가합니다.
https://github.com/RISCfuture/boolean
사용하다:
require 'boolean'
그런 다음
true.is_a?(Boolean)
false.is_a?(Boolean)
예상대로 정확하게 작동합니다.
아뇨. 코드가있는 것과는 다릅니다. Boolean이라는 클래스가 없습니다. 이제 모든 답을 가지고 하나를 만들고 사용할 수 있어야합니다. 수업을 만드는 방법을 알고 있지 않습니까? 이 아이디어가 궁금해서 여기에 온 것뿐입니다. 많은 사람들이 "왜? Ruby가 Boolean을 어떻게 사용하는지 알아야합니다"라고 말할 수 있습니다. 그래서 답을 얻었습니다. 질문 주셔서 감사합니다. 생각할 거리. Ruby에 Boolean 클래스가없는 이유는 무엇입니까?
NameError: uninitialized constant Boolean
객체에는 유형이 없습니다. 그들은 수업입니다. 개체에는 데이터가 있습니다. 그래서 데이터 유형을 말할 때 이름이 약간 잘못된 것입니다.
또한 rand 1은 항상 0을 제공하는 것처럼 보이기 때문에 rand 2를 시도하십시오. rand 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
'IT' 카테고리의 다른 글
기능 계승 함수 (0) | 2020.07.21 |
---|---|
완성 화 자바 펼쳐 양식 (프레임 워크 없음) (0) | 2020.07.21 |
변수를 2로 나눌 수 있는지 확인 (0) | 2020.07.21 |
Bash Templating : Bash를 사용하여 템플릿에서 구성 파일을 작성하는 방법은 무엇입니까? (0) | 2020.07.21 |
URL을 공유로 변환 한 후 다시 변환 (0) | 2020.07.21 |