【发布时间】:2013-11-14 17:34:26
【问题描述】:
Ruby 类是否有可能实现一个真实性方法,或者除了 false 和 nil 之外的所有对象是否都被设计为自动为 true?
【问题讨论】:
Ruby 类是否有可能实现一个真实性方法,或者除了 false 和 nil 之外的所有对象是否都被设计为自动为 true?
【问题讨论】:
第二个问题的答案是:是的,除了 false 和 nil 之外的所有内容在 Ruby 中都被认为是“真实的”。
所以,例如
a = 'foo' if 0
# => "foo"
a = 'foo' if []
# => "foo"
a = 'foo' if ''
# => "foo"
a = 'foo' if nil
# => nil
a = 'foo' if false
# => nil
【讨论】:
至少在 1.9.3 中,您可以对! 进行一些控制:
$ irb
>> class C
>> def !
>> true
>> end
>> end
=> nil
>> c = C.new
=> #<C:0x7b5b9cd6>
>> !c
=> true
>> !!c
=> false
>>
【讨论】:
puts 'eh?' if c && !c
除了 false 和 nil(包括 0,这有时会使来自其他语言的人感到困惑)之外的所有内容都是真实的。
【讨论】: