Ответ 1
Вот так:
(foo ||= []) << "bar"
В скобках бит foo
возвращается, если он уже существует, или создает его, если это не так, а затем добавляет <<
.
У меня есть следующее:
foo ||= []
foo << "bar"
И я уверен, что это можно сделать в одной строке, я просто не могу найти, как это сделать.
Важно, что foo может или не может существовать. Если он существует, он всегда является массивом, если он не существует, он должен стать массивом и добавить к нему переменную.
Вот так:
(foo ||= []) << "bar"
В скобках бит foo
возвращается, если он уже существует, или создает его, если это не так, а затем добавляет <<
.
Если вы хотите добавить "bar"
, когда foo
еще не определено:
foo ||= ["bar"]
если вы хотите добавить "bar"
, независимо от того, существует или нет foo
:
(defined? foo) ? foo << "bar" : foo = ["bar"]
Однако в последнем случае я лично предпочитаю, как написан оригинальный код. Конечно, это можно сделать в одной строке, но я думаю, что реализация двух строк более читаема.
Какой код вы пишете, где не уверены, существует ли локальная переменная?
Если это что-то вроде
def procedural_method(array)
array.each do |array_item|
result ||= []
result << bar(array_item)
end
result
end
тогда вы можете попробовать более функциональный подход к программированию
def functional_programming_method(array)
result = array.map do |array_item|
bar(array_item)
end
result
end