Как перегрузить оператор << в Ruby? - PullRequest
3 голосов
/ 29 ноября 2009

Я не уверен, как выполнить перегрузку оператора << для метода. Вот как я предполагал, что это будет работать: </p>

def roles<<(roles)
  ...  
end

Это, однако, выбрасывает ошибки. Есть предложения?

1 Ответ

9 голосов
/ 29 ноября 2009

Вы должны сделать это из класса. Как это:

class Whatever
  attr_accessor :roles
  def initialize
    @roles = []
  end
end

У вас не может быть <<roles метода. Вы должны иметь аксессор для roles, который поддерживает оператор <<.

РЕДАКТИРОВАТЬ: я обновил код. Теперь вы можете видеть, как оператор << должен быть перегружен, но вы также можете делать то же, что и часть roles<<. Вот небольшой фрагмент его использования:

w = Whatever.new
w << "overload for object called"
# and overloads for the roles array
w.roles << "first role"
w.roles << "second role"
...