foo ||= []
foo << :element
Fühlt sich etwas klobig an. Gibt es einen idiomatischeren Weg?
foo ||= []
foo << :element
Fühlt sich etwas klobig an. Gibt es einen idiomatischeren Weg?
Antworten:
(foo ||= []) << :element
Aber meh. Ist es wirklich so beschwerlich, es lesbar zu halten?
foo
sich um einen komplexeren Ausdruck handelt, z. B. einen (verschachtelten) Hash, in dem Sie nach Werten suchen, ist dies eine gute Möglichkeit, um zu vermeiden, dass die Werte mehrmals nachgeschlagen werden oder eine andere Variable für den nachgeschlagenen Array-Wert ausgegeben wird.
Sie können auch vom Kernel # Array profitieren , wie zum Beispiel:
# foo = nil
foo = Array(foo).push(:element)
# => [:element]
Dies hat den Vorteil, dass ein potenzielles Array abgeflacht wird, z.
# foo = [1]
foo = Array(foo).push(:element)
# => [1, :element]
foo = foo
Sätze foo
zu , nil
wenn foo
nicht definiert ist. Auch Kernel#Array
nicht abflachen foo
. Es wird nur zurückgegeben, foo
wenn es sich um ein Array handelt.
(foo ||= []) << :element
, aber ich finde es hässlicher.