我是ruby的新手,不知道是否可以在红宝石中完成。
我们可以重载组合比较运算符< =>在ruby中为自定义类对象。
答案 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:...>
祝你好运!