Ruby Obtenha a matriz de objetos devolvidos em um bloco
Pergunta
Em Ruby, em certas ocasiões (Ruby/Gosu/Texplay), eu vi código como o seguinte usado:
image.paint {
circle 20, 20
pixel 10, 10
}
Seria possível escrever uma função semelhante que possa ser usada assim?:
my_function {
"one"
"two"
"three"
}
Isso retornaria e mataria: ["um", "dois", "três"
PS Essa função não é apenas para gerar matrizes e não estou me perguntando sobre os métodos para fazê -lo, tudo o que preciso saber é a sintaxe. Agradecemos antecipadamente, Ell.
Solução
TexPlay
Parece bom, como você o encontra? :)
Não consigo pensar em uma maneira de fazer o que você quer, desculpe. Mas se você prefixar todas as strings com _
Isso é fácil:
function {
_"one"
_"two"
_"three"
}
#=> ["one", "two", "three"]
Onde:
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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow