ruby - 为什么 `<=` 和 `>=` 与 `<` 、 `>` 和 `==` 无关?

标签 ruby

当有一个方法== , 方法 !=被定义为采用该结果并应用 !给它。 (可能还有 =~!~ 。)

与此不同,>= , 通常表示 >== , 实际上独立于 >== .这两个定义似乎都不会影响另一个(与 <=<== 类似)。为什么它们被设计成独立的?

编辑 Broi Satse 指出,在继承 Comparable 的类中,确实存在这样的关系。所以我的问题将被重申:为什么这种关系仅适用于此类类(class)?你什么时候想要(在非 Comparable 类中)有 >=独立工作 >==

最佳答案

ruby 中有一个名为 Comparable ( http://ruby-doc.org/core-2.2.3/Comparable.html ) 的模块,它实现了所有依赖于单个方法的方法 <=> .

class A
  include Comparable

  def initialize(a)
    @a = a
  end

  def <=>(other)
    @a <=> other.a
  end

  protected

  def a
    @a
  end
end

a = A.new(1)
b = A.new(3)

a < b

因为 Comparable 方法只依赖于 <=> , 重新定义 >不会影响任何其他方法(因为没有其他方法依赖于它的实现)。

关于ruby - 为什么 `<=` 和 `>=` 与 `<` 、 `>` 和 `==` 无关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251350/

相关文章:

ruby - 如何修改 ruby​​ 中现有的 csv 列?

ruby - MacRuby - 用于存储的 ActiveRecord?

ruby-on-rails - Heroku Action 缓存似乎不起作用

ruby-on-rails - Rails 服务器无法在 Rubymine 中工作,但可以在终端中工作?

ruby-on-rails - Nil :NilClass 的 Factory Girl 未定义方法

ruby - 要去除\r and\n 或\r\n 的正则表达式

ruby - 最后拆分和修改

ruby-on-rails - 我应该如何使用 RSpec 测试 Rails 应用程序以获得完整的测试覆盖率?

Ruby:捕获输出

ruby - 在没有安装/运行 SMTP 服务器的情况下使用 Ruby 发送电子邮件?