Me gustaría pasar un argumento (s) a un método que se define utilizando define_method, ¿cómo lo haría?
ruby
metaprogramming
Sixty4Bit
fuente
fuente
... y si quieres parámetros opcionales
... tantos argumentos como quieras
...combinación de
... todos ellos
Actualizar
Ruby 2.0 introdujo doble splat
**
(dos estrellas) que ( cito ) hace:... y, por supuesto, también puedes usarlo en el método de definición :)
Ejemplo de atributos con nombre:
Intenté crear un ejemplo con argumento de palabra clave, splat y splat doble, todo en uno:
o
... pero esto no funcionará, parece que hay una limitación. Cuando lo piensa, tiene sentido ya que el operador splat está "capturando todos los argumentos restantes" y el splat doble está "capturando todos los argumentos de palabras clave restantes", por lo tanto, mezclarlos rompería la lógica esperada. (¡No tengo ninguna referencia para probar este punto, doh!)
actualización 2018 agosto:
Artículo resumen: https://blog.eq8.eu/til/metaprogramming-ruby-examples.html
fuente
a.foo 1
lugar defoo 1
). ¡Gracias!Además de la respuesta de Kevin Conner: los argumentos de bloque no admiten la misma semántica que los argumentos de método. No puede definir argumentos predeterminados o argumentos de bloque.
Esto solo se soluciona en Ruby 1.9 con la nueva sintaxis alternativa "stabby lambda" que admite la semántica de argumentos de método completo.
Ejemplo:
fuente
Con 2.2 ahora puede usar argumentos de palabras clave: https://robots.thoughtbot.com/ruby-2-keyword-arguments
fuente