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 に答える