在Ruby中代理每个方法

时间:2009-11-10 09:24:20

标签: ruby coding-style

这是将“每个”调用转发给哈希本地每种方法的最有效方式。

我应该让@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 个答案:

答案 0 :(得分:2)

@index应该是私密的。无需在类范围之外公开它。 如果您只需要委派each方法,那么您的示例非常好。

对于更复杂的情况,您可以考虑实施委托设计模式。 Ruby带有Delegate module

答案 1 :(得分:1)

在效率方面,我不认为它有任何问题。但是,您应该保持@index私有,否则包装器each方法的重点就会丢失。