我发现<<
除非它已经被初始化,否则它不能被 Array 使用。我目前是这样写的:
unless @app
@app = my_array
else
@app << my_array
end
有没有更好的方法来写这个?
我以前用过||=,但是
(@app ||= []) << [1,2,3]
将返回 [[1, 2, 3]],这不是我们想要的。我们想要 [1, 2, 3]
您可以在此处使用快捷方式
(@app ||= []) << xxx
如果要将数组推送到@app
变量中,那么 usingconcat
是一个更好的选择:
(@app ||= []).concat [1, 2, 3]
(@app ||= []).concat [4, 5, 6]
@app # => [1, 2, 3, 4, 5, 6]
或者,您可以按照@ck3g 的建议使用 splat 运算符。
> (@app ||= []).push *[1, 2, 3]
=> [1, 2, 3]
is " *
unarray" 运算符。
> array = [1, 2, 3]
=> [1, 2, 3]
> [*array]
=> [1, 2, 3]
方法<<
和push
不同之处在于push
可以采用多个参数。
这也适用于单一值:
> (@app2 ||= []).push *1
=> [1]
这里有一个成语:
@app ||= []
@app << xxx
也许您使用 << 错误?<< 表示数组的一个元素,而不是数组的一个块。
@app ||= []
@app.concat my_array