Tome este ejemplo:bloque de Ruby a cadena en lugar de ejecutar
write_as_string { puts 'x' }
entonces yo quiero ser capaz de hacer
def write_as_string(&block)
puts block.to_s
end
Cuando ejecuto esto, quiero que la salida sea:
"puts 'x'"
Quiero ser capaz de recibir el bloque y obtener el código real para el bloque en lugar de ejecutarlo.
Motivación: Al crear una DSL, quiero que la simulación se convierta en una serie de otras llamadas al método, ocultas al código de llamada, utilizando los objetos y métodos existentes sin que el mono las parchee.
¡Cualquier idea sobre esto sería genial!
Gracias
Ben
Eso parece genial. Pero dado el siguiente ejemplo, necesito de alguna manera obtener el bloque definido como una cadena. ¿Cómo podría hacer esto? rubí = "def \ n pone 'A' \ nend \ n \ NDEF b \ na \ nend" parser = RubyParser.new ruby2ruby = Ruby2Ruby.new sexp = parser.process (rubí) O tener Me perdí algo? –
si no le preocupa la compatibilidad con 1.9, recomendaré la respuesta de @ mletterle. – austinfromboston