Eu gostaria de passar um argumento (s) para um método definido usando define_method, como eu faria isso?
ruby
metaprogramming
Sixty4Bit
fonte
fonte
... e se você deseja parâmetros opcionais
... quantos argumentos você quiser
...combinação de
... todos eles
Atualizar
O Ruby 2.0 introduziu o splat duplo
**
(duas estrelas) que ( cito ):... e é claro que você também pode usá-lo no método define :)
Exemplo de atributos nomeados:
Eu estava tentando criar um exemplo com argumento de palavra-chave, splat e double splat, tudo em um:
ou
... mas isso não vai funcionar, parece que há uma limitação. Quando você pensa sobre isso, faz sentido, pois o operador splat está "capturando todos os argumentos restantes" e o splat duplo está "capturando todos os argumentos de palavras-chave restantes", portanto, misturá-los quebraria a lógica esperada. (Eu não tenho nenhuma referência para provar este ponto doh!)
atualização 2018 agosto:
Artigo de resumo: https://blog.eq8.eu/til/metaprogramming-ruby-examples.html
fonte
a.foo 1
vez defoo 1
). Obrigado!Além da resposta de Kevin Conner: argumentos de bloco não suportam a mesma semântica que argumentos de método. Você não pode definir argumentos padrão ou argumentos de bloco.
Isso é corrigido apenas no Ruby 1.9 com a nova sintaxe alternativa "stabby lambda", que suporta a semântica de argumentos do método completo.
Exemplo:
fonte
Com o 2.2, agora você pode usar argumentos de palavras-chave: https://robots.thoughtbot.com/ruby-2-keyword-arguments
fonte