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?
foosí 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 = fooestablece fooen nilcuando foono está definido. Además, Kernel#Arrayno se aplana foo. Simplemente regresa foosi es una matriz.
(foo ||= []) << :element, pero lo encuentro más feo.