我是新手,正在学习 ruby 。希望对提出的问题有更好的理解。我不明白可比的mixin和可枚举的mixin的用法。我的意思是我们在需要使用它们时不将其包含在我们的类(class)中,对吗?如果我们想比较两个对象,我们只需写x> y即可。那么,显式使用它们的用途是什么?
最佳答案
伟大的问题阿卡什!
有时,如何比较两个对象并非“简单”!如果您有狗课怎么办?您如何比较两个Dog实例?比较应该基于什么?比较他们的名字就足够了吗?他们的品种?他们的DNA?这完全取决于您。那就是您可以在模型中包含Comparable并实现自己所需的最小功能,以定义使两个Dog实例相同的原因。您定义比较。一旦在模块中定义了比较器,就可以对对象进行相等性比较或对其进行排序或排序,因为ruby知道如何将一个实例与另一个实例进行比较。
同样,包含Enumerable模块使您的类能够迭代其实例的集合。一旦在类中实现了每个方法,您就可以在类中获得整个Enumerable模块的方法。诸如map/collect等方法可以在您的类中使用。
class Dog
include Enumerable
attr_accessor :puppies, :name
def initialize(name)
@name = name
@puppies = []
end
def each(&block)
@puppies.each do |puppy|
puts "yielding #{puppy}"
yield(puppy)
puts "just yielded #{puppy}"
end
end
end
tommy = Dog.new("tommy")
tommy.puppies = ["julie","moti","husky"]
tommy.each do |p|
puts p
end
big_puppies = tommy.map{|x| x.titleize }