比较运算符`< =>`和布尔值

时间:2013-01-16 17:51:21

标签: ruby

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

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

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

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

修改 这就是我想要的:

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

2 个答案:

答案 0 :(得分:6)

<=>运算符实际上不是“组合布尔”;它是订购同一类的项目,如果它们已定义了订单。号码是有序的; 1大于00小于8675309。布尔值没有固有的顺序; true不大于false,反之亦然。

答案 1 :(得分:3)

他们不是同一个班级。 trueTrueClass的单身,而falseFalseClass的单身。你正在比较苹果和橘子(或者,在true <=> true案例中,苹果与苹果相同)。

为了好奇,为什么你认为true <=> false应该等于1?编辑:萨瓦打败它