将项添加到Ruby中的数组,即使该变量不存在

时间:2011-03-09 14:55:47

标签: ruby arrays shorthand

我有以下内容:

foo ||= []
foo << "bar"

我确信这可以在一行中完成,我无法找到。

重要的是,foo可能存在,也可能不存在。如果它存在,它总是一个数组,如果它不存在,它必须成为一个数组并获得一个附加到它的变量。

3 个答案:

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