在"Is it possible to sort a list of objects depending on if the individual object's response to a method?"这篇文章中,我发现飞碟在布尔值上无法正常工作。
考虑以下内容:
Ruby 1.8.7:
考虑以下内容:
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:
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没有固定的排序顺序有关,因为哪个先出现呢?但是,我认为这听起来相当薄弱。
这是sort函数中的一个bug吗?
<=>
应该始终返回0
、-1
或1
,或者未定义。返回nil
违反了预期。我同意。 - sawa<=>
的返回值为-1
、0
、1
和nil
,分别表示小于、等于、大于和不可比较。这是<=>
的标准协议,我不明白布尔值的实现如何违反该协议。true
等于true
,但它与false
不可比较。 - Jörg W Mittagsort
想说的是:“嘿,蠢货,true 和 false 是不可比较的;试着对一些实现了 Comparable 模块的对象进行排序”,但它输出的是“comparison of TrueClass with false failed”,这并没有什么帮助。 - AlexChaffee