foo ||= []
foo << :element
Немного неуклюжий. Есть ли способ более идиоматичный?
foo ||= []
foo << :element
Немного неуклюжий. Есть ли способ более идиоматичный?
Ответы:
(foo ||= []) << :element
Но м-м-м. Неужели сохранять его читабельным настолько обременительно?
foo
само по себе является более сложным выражением, например (вложенным) хешем, в котором вы ищите значения, это хороший способ избежать поиска значений несколько раз или использования другой переменной для искомого значения массива.
Вы также можете воспользоваться массивом Kernel # Array , например:
# foo = nil
foo = Array(foo).push(:element)
# => [:element]
который имеет преимущество сглаживания потенциального массива, например:
# foo = [1]
foo = Array(foo).push(:element)
# => [1, :element]
foo = foo
устанавливает foo
в nil
когда foo
не определен. Кроме того, Kernel#Array
не сглаживается foo
. Он просто возвращается, foo
если это массив.
(foo ||= []) << :element
, но я считаю это уродливее.