我怎么能压缩这个逻辑?
an_array = some_list.select do |item|
include_item = true
if a_boolean
include_item = a_method?(item)
end
include_item
end
答案 0 :(得分:3)
an_array = some_list.select{|item| !a_boolean || a_method?(item)}
答案 1 :(得分:3)
我恳请你发表一些更明智的例子;元变量导致黑暗面。在您的情况下,如果a_boolean
是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:正如评论中所指出的那样,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 }