如何定义ruby方法来收集对象?

时间:2010-01-21 17:40:00

标签: ruby

我想定义类似include?(obj)的方法,它检查我的类数组中obj的存在。有没有办法在ruby中做到这一点?

我有Item类

class Item < ActiveRecord::Base
    include Comparable

    belongs_to :itemable, :polymorphic => true
    def <=>(other)
      self.itemable.id <=> other.itemable.id
    end
...
end

我希望以这种方式使用它

item_set1.subset? item_set2

但结果却没有使用&lt; =&gt;在此过程中,仅使用item.id进行检查。 如何覆盖子集或其他方法来完成这项工作。

由于

3 个答案:

答案 0 :(得分:3)

如果你的班级是一个实现'每个'的集合 你可以混合Enumerable 获得一系列方法,包括'include?'

答案 1 :(得分:1)

您是说数组是实例变量吗?

class Foo
  def my_array_include?(obj)
    @my_array.include?(obj)
  end
end

答案 2 :(得分:0)

设置使用eql?和哈希,而不是==或&lt; =&gt;。试试这个:

class Item < ActiveRecord::Base

  ...

  def eql?(other)
    id == other.id
  end

  def hash
    id
  end

end