我是否可以默认分配哈希键和+;=在一行的值中(在Ruby中)?

我是否可以默认分配哈希键和+;=在一行的值中(在Ruby中)?,ruby,hash,increment,Ruby,Hash,Increment,我不能这样做 r = {a:nil} Array.wrap(r[:a]) += [2,3] #=> SyntaxError: (irb):126: syntax error, unexpected tOP_ASGN, expecting $end 因为换行(或| |=)的结果不是原始引用 当然,可以分两行进行: r = {a:nil} r[:a] ||= [] r[:a] += [2,3] => {:a=>[2, 3]} 我可以一次完成吗?试试以下方法: (r[:a]|

我不能这样做

r = {a:nil}
Array.wrap(r[:a]) += [2,3]

#=> SyntaxError: (irb):126: syntax error, unexpected tOP_ASGN, expecting $end
因为换行(或
| |=
)的结果不是原始引用

当然,可以分两行进行:

r = {a:nil}
r[:a] ||= []
r[:a] += [2,3]

=> {:a=>[2, 3]}
我可以一次完成吗?

试试以下方法:

(r[:a]||=[]).concat [2,3]

r[:a]
# => [2, 3]
(r[:a] ||= []).concat [2, 3]
要同时分配哈希,请执行以下操作:

((r ||= {})[:a] ||= []).concat [2, 3]

但是,一行程序并不是生成可读和可维护代码的最佳方式。

我不确定我是否理解这个问题,部分原因是我不熟悉
wrap
,我认为这是
ActiveSupport
的一部分。然而,如果你只是想要
r[:a]=>[2,3]
如果
r[:a]==nil
(在
r={a:nil}
之后),它不就是:
r[:a]|124;=[2,3]
?@NewAlexandria:fixed我现在认为这是一个重复的答案。不管好坏