foo ||= []
foo << :element
Se siente un poco torpe. ¿Existe una forma más idiomática?
foo ||= []
foo << :element
Se siente un poco torpe. ¿Existe una forma más idiomática?
Respuestas:
(foo ||= []) << :element
Pero meh. ¿Es realmente tan oneroso mantenerlo legible?
foo
sí es una expresión más compleja, como un hash (anidado) en el que busca valores, esta es una buena manera de evitar buscar los valores varias veces o gastar otra variable para el valor de la matriz buscado.
También podría beneficiarse del Kernel # Array , como:
# foo = nil
foo = Array(foo).push(:element)
# => [:element]
que tiene la ventaja de aplanar una matriz potencial, como:
# foo = [1]
foo = Array(foo).push(:element)
# => [1, :element]
foo = foo
establece foo
en nil
cuando foo
no está definido. Además, Kernel#Array
no se aplana foo
. Simplemente regresa foo
si es una matriz.
(foo ||= []) << :element
, pero lo encuentro más feo.