Ruby Получить массив из объектов, возвращаемых в блок
Вопрос
В Ruby, в определенные случаи (Ruby / Gosu / Texplay) I'V видел код, как используется следующее:
image.paint {
circle 20, 20
pixel 10, 10
}
Можно ли мне написать аналогичную функцию, которую можно использовать так?:
my_function {
"one"
"two"
"three"
}
Это вернутся и массив: [«один», «два», «три»
PS Эта функция не только для генерации массивов, и мне не задается вопросом о методах, чтобы сделать это, все, что мне нужно знать о синтаксисе. Спасибо заранее, ell.
Решение
TexPlay
выглядит красиво, как вы его найдете? :)
Я не могу думать о том, как вы хотите, извините. Но если вы префиксируете каждую строку с _
это легко:
function {
_"one"
_"two"
_"three"
}
#=> ["one", "two", "three"]
Где:
def function(&block)
Object.new.tap do |s|
s.instance_eval do
def _(var)
@val ||= []
@val << var
end
end
s.instance_eval(&block)
end.instance_variable_get(:@val)
end
Не связан с StackOverflow