3

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

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

有没有人对实现这一目标的干净方式有任何想法?谢谢!

4

1 回答 1

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

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

于 2013-04-17T05:42:19.690 回答