我是否可以默认分配哈希键和+;=在一行的值中(在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我现在认为这是一个重复的答案。不管好坏