你能定义<=>吗?在 Ruby 中,然后自动定义 ==、>、<、>= 和 <= 吗?

发布于 2024-09-01 09:16:04 字数 630 浏览 8 评论 0 原文

这是我的 Note 类的一部分:

class Note
  attr_accessor :semitones, :letter, :accidental

  def initialize(semitones, letter, accidental = :n)
    @semitones, @letter, @accidental = semitones, letter, accidental
  end

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

  def ==(other)
    @semitones == other.semitones
  end

  def >(other)
    @semitones > other.semitones
  end

  def <(other)
    @semitones < other.semitones
  end
end

在我看来,应该有一个我可以包含的模块,它可以根据我的 <=> 为我提供相等和比较运算符代码>方法。有吗?

我猜很多人都会遇到这样的问题。你通常如何解决? (如何使其干燥?)

Here's part of my Note class:

class Note
  attr_accessor :semitones, :letter, :accidental

  def initialize(semitones, letter, accidental = :n)
    @semitones, @letter, @accidental = semitones, letter, accidental
  end

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

  def ==(other)
    @semitones == other.semitones
  end

  def >(other)
    @semitones > other.semitones
  end

  def <(other)
    @semitones < other.semitones
  end
end

It seems to me like there should be a module that I could include that could give me my equality and comparison operators based on my <=> method. Is there one?

I'm guessing a lot of people run into this kind of problem. How do you usually solve it? (How do you make it DRY?)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

秋意浓 2024-09-08 09:16:04

是的,只需 include Comparable - 唯一的要求是定义 spaceship <=> 方法。

Yep just include Comparable - the only requirement is to have the spaceship <=> method defined.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文