在“
Is it possible to sort a list of objects depending on if the individual object’s response to a method?”中,我发现飞碟在布尔上不起作用.
考虑:
Ruby 1.8.7:
[true,false].sort # => undefined method `<=>' for true:TrueClass (NoMethodError) true <=> false # => undefined method `<=>' for true:TrueClass (NoMethodError)
Ruby 1.9.3:
[true,false].sort # => comparison of TrueClass with false Failed (ArgumentError) true <=> false # => nil true <=> true # => 0 false <=> true # => nil
它可能与true和false有关,没有规范的排序顺序,因为哪个是第一个?但是,对我来说听起来很弱.
这是一个排序错误吗?
解决方法
布尔值没有自然排序.
Ruby语言设计师可能觉得为开发人员发明一个排序是一个惊喜,所以他们故意排除了比较运算符.