Как определить метод ruby ​​для сбора объекта? - PullRequest
0 голосов
/ 21 января 2010

Я хочу определить метод вроде include? (Obj), который проверяет наличие obj в массиве моего класса. Есть ли способ сделать это в ruby?

У меня есть Класс предмета

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

но оказывается, что не использует <=> в процессе и использует только item.id для проверки. Как переопределить подмножество или другие способы сделать это.

Спасибо

Ответы [ 3 ]

3 голосов
/ 21 января 2010

, если ваш класс представляет собой коллекцию, которая реализует «каждый»
Вы можете mixin Enumerable чтобы получить множество методов, включая 'include?'

1 голос
/ 21 января 2010

Вы говорите, что массив является переменной экземпляра?

class Foo
  def my_array_include?(obj)
    @my_array.include?(obj)
  end
end
0 голосов
/ 27 января 2010

Set использует eql? и хэш, а не == или <=>. Попробуйте это:

class Item < ActiveRecord::Base

  ...

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

  def hash
    id
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...