0

このロジックを圧縮するにはどうすればよいですか?

an_array = some_list.select do |item|                                  
  include_item = true                                                        
  if a_boolean                                                                  
    include_item = a_method?(item)                                     
  end                                                                        
  include_item                                                               
end   
4

3 に答える 3

3
an_array = some_list.select{|item| !a_boolean || a_method?(item)}
于 2013-01-29T04:56:42.130 に答える
3

もっと賢明な例を投稿することをお勧めします。メタ変数はダークサイドにつながります。あなたの場合、あなたの場合、a_booleanisの場合false、コードは基本的に を評価しますan_array = some_list.cloneが、スローモーションです。したがって、次のように書く方が賢明です。

an_array =
  if a_boolean
    some_list.select { |item| a_method?(item) }
  else
    some_list.clone
  end

あなたの意図は過度に一般的なコードを使用することによって完全に侵入できないため、それが実際に良いかどうかはまだわかりません。

編集:追加.clone

EDIT2: コメントで述べたように、ミーガーと私の蛇行する脳は最終的に同じ場所に到着しました:

an_array = some_list.clone
an_array.select! { |item| a_method?(item) } if a_boolean
于 2013-01-29T05:00:50.897 に答える
2
an_array = some_list.select { |item| a_boolean ? a_method?(item) : true }
于 2013-01-29T04:56:36.777 に答える