2009-11-10 4 views
0

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

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

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

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

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

Спасибо, ребята! – reto

ответ

2

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

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

1

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

Смежные вопросы