我试图让一个类的实例MyClass
评估为一个虚假的值。所以我试图覆盖我能想到的所有方法来MyClass
充当nil
. 我有:
a = MyClass.new
a.nil? #=> true
a.class #=> NilClass
a == nil #=> true
a.eql? nil #=> true
a.equal? nil #=> true
a.instance_of? NilClass #=> true
a.kind_of? NilClass #=> true
a.is_a? NilClass #=> true
我什至得到了
nil == a #=> true
nil.eql? a #=> true
nil.equal? a #=> true
最后我尝试了
a.__id__ #=> 4
nil.__id__ #=> 4
a.object_id #=> 4
nil.object_id #=> 4
但是,a
将始终评估为true
. 所以我想知道 Ruby 如何检查a
isnil
或false
. 我想这是开发人员无法访问的东西。
这不是要解决实际问题,我只是想知道它是否确实不能完成。我知道这会打破 Ruby 的“everything-ist-true-except-false-and-nil”-idiom,而且它很可能是一个纯粹的邪恶黑客。