私の小さなプロジェクトで、基準によるフィルターのアプローチを実装しようとしています。名前、年、ジャンルのフィルターがある Filter クラスがあります。例えば:
Filter.new.name("The Shawshank Redemption")
Filter.new.year("1994")
Filter.new.genre("drama")
また、映画のリストもあり、それぞれが名前、年、およびジャンルのメソッドを持つオブジェクトです。次のことを実行できるようにしたい (MoviesContainer は、@movies リストを持つ単なるクラスです)。
MoviesContainer.filter Filter.new.name("The Godfather") & Filter.new.year("1972") | Filter.year("1974")
|、&、および ! を簡単にオーバーロードできます。Filter クラスの演算子ですが、フィルター オブジェクトを組み合わせて、フィルターに渡すことができる 1 つのオブジェクトになるようにする方法がわかりません。どんなアイデアでも喜んで受け入れます。:)
これまでの私の最善のアイデアは、すべての Filter.new に対して proc を作成し、それらを &,| で結合することです。と !方法ですが、方法がわかりません。私はこのようなものがうまくいくと思っていますが、そうではありません:D
proc { |movie| proc { |movie| movie.name == "The Godfather" } && proc { |movie| movie.year== "1972" }
そして、すべての @movies アイテムでこれを呼び出します。procs の組み合わせについて教えてください。または、より良い解決策を提案してください。ありがとうございました。