Masatoshi SEKI
m_seki****@mva*****
2015年 12月 29日 (火) 22:15:58 JST
咳といいます。 rroongaで複数のキーワードからなる検索を書く方法を調べていて次のblogを読みました。 http://www.clear-code.com/blog/2009/7/31.html injectとexpressionを使って次のようなコード片が出ています。 records = documents.select do |record| words.inject(nil) do |expression, word| sub_expression = record["content"] =~ word if expression.nil? sub_expression else expression & sub_expression end end end sub_expressionのクラスはExpressionBuilderでしたっけ? これの & や | などがnilを引数に取るとき自分自身を返すようにしたら 次のように書けないでしょうか? records = documents.select do |record| words.inject(nil) do |expression, word| (record["content"] =~ word) & expression end end &,|の対称性がなくなるのがイマイチならメソッド名を変えてもかまいませんし、 nilが不自然ならExpressionBuilder::NopとかSentinelとかTailとかでも… 複数キーワードの検索はよくありそうな処理なので、もっと簡単に書く方法はありますか?