2

<=>运算符不能很好地处理布尔值。

true <=> true # => 0
true <=> false # => nil

这种行为是设计意图还是我遗漏了什么?我预计:

true <=> false # => 1
false <=> true # => -1

编辑 这就是我要找的:

false.to_i <=> true.to_i # => -1
4

2 回答 2

6

<=>运算符并不是真正的“组合布尔值” ;如果它们定义了订单,则它用于订购同一类的项目。数字是有序的;大于和小于。布尔值没有固有的顺序;不大于或反之亦然。1008675309truefalse

于 2013-01-16T17:59:39.540 回答
3

他们不是同一个班级。true是 的单例TrueClass,而false是 的单例FalseClass。您正在比较苹果和橙子(或者,true <=> true如果一个苹果与同一个苹果)。

出于好奇,您为什么认为true <=> false应该相等1?编辑:被sawa打败了

于 2013-01-16T17:54:48.293 回答