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, но я считаю это уродливее.