我正在尝试使类MyClass
的实例评估为虚假值。所以我试图覆盖所有我认为能够使MyClass
充当nil
的方法。我:在评估条件中的真实性时,Ruby如何评估对象的类别?
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
是nil
还是false
。我想这是开发人员无法访问的东西。
这不是为了解决实际问题,我只是想知道它是否确实无法完成。我知道这会破坏Ruby的“一切都是真实的 - 除了虚假和零”--idiom,它很可能是纯粹的邪恶黑客。
编号nikifi想知道这个习语的好处。我想知道,它是如何执行的,以及是否有办法干扰api。 – Conkerchen 2013-02-22 17:03:07