【发布时间】:2012-08-23 05:14:55
【问题描述】:
foo ||= []
foo << :element
感觉有点笨重。有没有更惯用的方式?
【问题讨论】:
-
这是的惯用方式。你可以把它写成
(foo ||= []) << :element,但我觉得它更丑。 -
IMO 正确的方法是拥有初始值。如果你有 ||= 和
foo ||= []
foo << :element
感觉有点笨重。有没有更惯用的方式?
【问题讨论】:
(foo ||= []) << :element,但我觉得它更丑。
(foo ||= []) << :element
但是嗯。保持可读性真的那么麻烦吗?
【讨论】:
foo 本身是一个更复杂的表达式,例如在其中查找值的(嵌套)散列,这是避免多次查找值或花费另一个变量的好方法查找的数组值。
您也可以随时在任何数组上使用 push 方法。我更喜欢它。
(a ||= []).push(:element)
【讨论】:
您也可以从Kernel#Array 中受益,例如:
# foo = nil
foo = Array(foo).push(:element)
# => [:element]
这具有展平潜在数组的好处,例如:
# foo = [1]
foo = Array(foo).push(:element)
# => [1, :element]
【讨论】:
foo 未定义时,我不确定在Ruby 中是否始终保证foo = foo 将foo 设置为nil。此外,Kernel#Array 不会变平 foo。如果它是一个数组,它只会返回 foo。
为了可读性和没有条件,也更详细一点:
foo = Array(foo) << :element
【讨论】: