Проксирование каждого метода в Ruby - PullRequest
0 голосов
/ 10 ноября 2009

Является ли это наиболее эффективным способом переадресации вызова «каждый» нативному методу «каждый» хэша.

Должен ли я сделать @index видимым снаружи?

Я немного неуверен, так как блок задействован.

class TimeSlice
  def initialize(list)
    # @index is a hash
    @index = list.do_some_magic()
  end

  def each(&block) 
    @index.each(&block)
  end
end

Ответы [ 2 ]

2 голосов
/ 10 ноября 2009

@index должен быть приватным. Не нужно выставлять его за пределы класса. Ваш пример отлично подходит, если вам нужно только делегировать метод each.

Для более сложных случаев можно рассмотреть реализацию шаблона проектирования Delegate . Ruby поставляется с делегатским модулем .

1 голос
/ 10 ноября 2009

Когда дело доходит до эффективности, я не думаю, что с этим что-то не так. Тем не менее, вы должны хранить @index в секрете, иначе весь смысл метода each будет утерян.

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