我有以下内容:
foo ||= []
foo << "bar"
我确信这可以在一行中完成,我无法找到。
重要的是,foo可能存在,也可能不存在。如果它存在,它总是一个数组,如果它不存在,它必须成为一个数组并获得一个附加到它的变量。
答案 0 :(得分:44)
像这样:
(foo ||= []) << "bar"
如果括号位已经存在,则返回foo
,如果不存在则返回,然后<<
追加到它。
答案 1 :(得分:4)
如果您只想在"bar"
尚未定义时添加foo
:
foo ||= ["bar"]
如果您想添加"bar"
,无论foo
是否已存在:
(defined? foo) ? foo << "bar" : foo = ["bar"]
但是,在后一种情况下,我个人更喜欢编写原始代码的方式。当然可以在一行中完成,但我认为两行实现更具可读性。
答案 2 :(得分:2)
如果您不确定本地变量是否存在,您在编写什么代码?
如果它像
那样def procedural_method(array)
result ||= []
array.each do |array_item|
result << bar(array_item)
end
result
end
然后你可以尝试更多功能的编程方法
def functional_programming_method(array)
array.map do |array_item|
bar(array_item)
end
end