0

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

unless @app
 @app = my_array
else
 @app << my_array
end 

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

我以前用过||=,但是

(@app ||= []) << [1,2,3]

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

4

4 回答 4

5

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

(@app ||= []) << xxx

编辑:

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

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

@app # => [1, 2, 3, 4, 5, 6]

或者,您可以按照@ck3g 的建议使用 splat 运算符。

于 2013-01-15T06:13:47.177 回答
2
> (@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]
于 2013-01-15T07:57:03.447 回答
1

这里有一个成语:

@app ||= []
@app << xxx
于 2013-01-15T06:13:52.980 回答
1

也许您使用 << 错误?<< 表示数组的一个元素,而不是数组的一个块。

@app ||= []
@app.concat my_array 
于 2013-01-15T07:59:59.387 回答