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