什么是将元素附加到可能尚未初始化的数组的Ruby习惯用法?

har*_*ryz 0 ruby arrays idioms append

我发现<<除非已经初始化,否则Array不能使用它.我目前这样写:

unless @app
 @app = my_array
else
 @app << my_array
end 
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来写这个?

我之前使用过|| =,但是

(@app ||= []) << [1,2,3]
Run Code Online (Sandbox Code Playgroud)

将返回[[1,2,3]],这不是我们想要的.我们想要[1,2,3]

Ser*_*sev 5

您可以在此处使用快捷方式

(@app ||= []) << xxx
Run Code Online (Sandbox Code Playgroud)

编辑:

如果要将数组推送到@app变量,那么使用concat是一个更好的选择:

(@app ||= []).concat [1, 2, 3]
(@app ||= []).concat [4, 5, 6]

@app # => [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用splat运算符,如@ ck3g所示.