重载< =>运营商红宝石?

时间:2015-03-02 11:01:35

标签: ruby

我是ruby的新手,不知道是否可以在红宝石中完成。

我们可以重载组合比较运算符< =>在ruby中为自定义类对象。

1 个答案:

答案 0 :(得分:4)

当然可以!对于Ruby的宇宙飞船运营商而言,这将有所帮助。

您需要包含Comparable模块,然后实现该方法。看一下覆盖<=>http://brettu.com/rails-daily-ruby-tips-121-spaceship-operator-example/

的简单示例

我将从文章中作为例子:

class Country
  include Comparable

  attr_accessor :age

  def initialize(age)
    @age = age 
  end 

  def <=>(other_country)
    age <=> other_country.age
  end 
end

为了重载<=>,您不需要包含Comparable模块,但是通过包含它,它会“混合”一些有用的方法到您可以执行的Country类比较。

让我们看一些例子:

country1 = Country.new(50)
country2 = Country.new(25)

country1 > country2
# => true

country1 == country2
# => false 

country1 < country2
# => false

country3 = Country.new(23)

[country1, country2, country3].sort
# => [country3, country2, country1]

但是,如果没有包含Comparable模块:

country1 > country2
# => NoMethodError: undefined method `>' for #<Country:...>
祝你好运!