我有以下内容:
foo ||= []
foo << "bar"
而且我确信这可以在一行中完成,我只是找不到方法。
重要的是, foo 可能存在,也可能不存在。如果它存在,它总是一个数组,如果它不存在,它必须变成一个数组并获得一个附加到它的变量。
像这样:
(foo ||= []) << "bar"
带括号的位foo
如果已经存在则返回,如果不存在则创建它,然后<<
附加到它。
如果您只想添加"bar"
whenfoo
尚未定义:
foo ||= ["bar"]
"bar"
如果无论是否foo
已经存在都想添加:
(defined? foo) ? foo << "bar" : foo = ["bar"]
但是,在后一种情况下,我个人更喜欢原始代码的编写方式。当然可以在一行中完成,但我认为两行实现更具可读性。
您在不确定是否存在局部变量的情况下编写了什么代码?
如果是这样的
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