foo ||= []
foo << :element
Відчувається трохи незграбно. Чи є більш ідіоматичний спосіб?
foo ||= []
foo << :element
Відчувається трохи незграбно. Чи є більш ідіоматичний спосіб?
Відповіді:
(foo ||= []) << :element
Але я. Невже так важко тримати його читабельним?
foo
саме по собі є більш складним виразом, як (вкладений) хеш, в якому ви шукаєте значення, це хороший спосіб уникнути перегляду значень багаторазово або витратити іншу змінну для шуканого значення масиву.
Ви також можете отримати вигоду з масиву ядра # , наприклад:
# 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
, але я вважаю це потворнішим.