<=>
运算符不能很好地处理布尔值。
true <=> true # => 0
true <=> false # => nil
这种行为是设计意图还是我遗漏了什么?我期待:
true <=> false # => 1
false <=> true # => -1
修改 这就是我想要的:
false.to_i <=> true.to_i # => -1
答案 0 :(得分:6)
<=>
运算符实际上不是“组合布尔”;它是订购同一类的项目,如果它们已定义了订单。号码是有序的; 1
大于0
且0
小于8675309
。布尔值没有固有的顺序; true
不大于false
,反之亦然。
答案 1 :(得分:3)
他们不是同一个班级。 true
是TrueClass
的单身,而false
是FalseClass
的单身。你正在比较苹果和橘子(或者,在true <=> true
案例中,苹果与苹果相同)。
为了好奇,为什么你认为true <=> false
应该等于1
?编辑:萨瓦打败它