有人可以解释一下这种情况下 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
  • 如果 AB 没有关系,则 nil

  • 所以,在你的例子中。 Integer 继承自 Fixnum ,显然这意味着 Fixnum 不继承自 Integer 。当然 StringNumeric 无关。

    这是 MRI 源代码形式的一些 'documentation' :)

    关于Ruby 包括返回 false 和 nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1697165/

    10-12 02:11