在Ruby中创建或附加到数组

ami*_*dfv 79 ruby arrays

foo ||= []
foo << :element
Run Code Online (Sandbox Code Playgroud)

感觉有点笨重.有更惯用的方式吗?

Dav*_*ton 137

(foo ||= []) << :element
Run Code Online (Sandbox Code Playgroud)

但是,好吧.保持可读性真是太麻烦了吗?

  • 为"让它保持可读性真是太麻烦了"的+1 可读性是王道. (36认同)
  • 如果 `foo` 本身是一个更复杂的表达式,比如一个(嵌套的)哈希,您可以在其中查找值,这是避免多次查找值或为查找的数组值花费另一个变量的好方法。 (2认同)

meu*_*eub 56

您也可以在任何阵列上使用push方法.我更喜欢它.

(a ||= []).push(:element)
Run Code Online (Sandbox Code Playgroud)


Chr*_*lle 8

您也可以从内核#数组中受益,例如:

# foo = nil
foo = Array(foo).push(:element)
# => [:element]
Run Code Online (Sandbox Code Playgroud)

它具有扁平化潜在阵列的好处,例如:

# foo = [1]
foo = Array(foo).push(:element)
# => [1, :element]
Run Code Online (Sandbox Code Playgroud)