有人可以解释一下这种情况下 false 和 nil 之间的区别是什么:
irb(main):008:0> Fixnum < Integer
=> true
irb(main):011:0> Integer < Fixnum
=> false
irb(main):012:0> String < Numeric
=> nil
我意识到“字符串不是数字”
并且“并非所有整数都是 fixnums”
我的想法是天真的和 bool 。要么某物包含某物或不包含某物,要么是真要么是假。但似乎还有第三种选择,比如“你在开玩笑吧?” ;-)
有人可以启发我吗?
最佳答案
鉴于代码 Object#<
, A < B
方法似乎是这样的:
A
在继承链中“更高”(例如 B.kind_of?( A ) == true
),则 true
。 A
在继承链中“较低”(例如 A.kind_of?( B ) == true
),则 false
。 A
和 B
没有关系,则 nil
。 所以,在你的例子中。
Integer
继承自 Fixnum
,显然这意味着 Fixnum
不继承自 Integer
。当然 String
与 Numeric
无关。这是 MRI 源代码形式的一些 'documentation' :)
关于Ruby 包括返回 false 和 nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1697165/