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.

Foi útil?

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
scroll top