我怎样才能使这个逻辑变得更加复杂

时间:2013-01-29 04:54:21

标签: ruby

我怎么能压缩这个逻辑?

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

3 个答案:

答案 0 :(得分:3)

an_array = some_list.select{|item| !a_boolean || a_method?(item)}

答案 1 :(得分: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

答案 2 :(得分:2)

an_array = some_list.select { |item| a_boolean ? a_method?(item) : true }