ruby - 为什么排序或宇宙飞船(飞碟)运算符 (<=>) 在 Ruby 中不能处理 bool 值?

标签 ruby spaceship-operator

在“Is it possible to sort a list of objects depending on if the individual object's response to a method?”中,我发现飞碟对 bool 值不起作用。

考虑:

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 没有规范的排序顺序有关,因为哪个先出现?但是,这对我来说听起来很弱。

这是 sort 中的错误吗?

最佳答案

bool 值没有自然顺序。

Ruby 语言设计者可能觉得为 bool 值发明一种排序方式会让开发人员大吃一惊,因此他们有意省略了比较运算符。

关于ruby - 为什么排序或宇宙飞船(飞碟)运算符 (<=>) 在 Ruby 中不能处理 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816131/

相关文章:

ruby - HAML for 循环在 HTML 渲染中打印单词 "true"

ruby-on-rails - 必须在我的验证/错误消息之间进行选择,或者通过其他属性对事物进行排序

ruby - Ruby <=> 组合器的实现

c++ - 宇宙飞船运算符(operator)的真实世界使用示例

c++ - C++20 宇宙飞船运算符的性能问题?

Ruby:初始化()与类主体?

ruby-on-rails - Rails 路由开始斜杠

ruby-on-rails - Passenger错误: libMagickCore. so.2:无法打开共享对象文件

c++ - 当父类没有为自己定义宇宙飞船运算符时覆盖宇宙飞船运算符

c++ - C++ 20 中的运算符 == 和 <=> 应该作为成员还是自由函数来实现?