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_booleanfalse,代码基本上评估an_array = some_list.clone,但在慢动作。因此,写起来会更明智

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

而且我仍然不知道它是否真的很好,因为使用过度通用的代码完全无法理解您的意图。

编辑:添加.clone.

EDIT2:如评论中所述,meagar 和我蜿蜒的大脑最终到达了相同的地方:

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 回答