默认情况下使可枚举对象变为惰性

时间:2013-04-17 05:08:15

标签: ruby lazy-evaluation ruby-2.0

我开始使用Ruby 2.0中的Enumerable :: Lazy功能,它看起来非常有用。

我有一个可通过远程数据源分页的Enumerable集合。因此,我希望它是一个“懒惰”的集合。但是,我不想指示我的类的每个用户每次想要使用任何Enumerable方法时调用.lazy。相反,最好包含一个假设的LazyEnumerable模块,默认情况下所有可枚举的方法都是惰性的。

有没有人对干净的方法有什么想法来实现这个目标?谢谢!

1 个答案:

答案 0 :(得分:2)

我有一个想法,并认为我会抓住这个:

module LazyEnumerable
  include Enumerable

  def self.make_lazy(*methods)
    methods.each do |method|
      define_method method do |*args, &block|
        lazy.public_send(method, *args, &block)
      end
    end
  end

  make_lazy *(Enumerable.public_instance_methods - [:lazy])
end

很想知道是否有更强大的方法来做到这一点。