Nehmen Sie dieses Beispiel:Ruby-Block Zeichenfolge anstelle der Ausführung
write_as_string { puts 'x' }
Ich möchte dann in der Lage
def write_as_string(&block)
puts block.to_s
end
zu tun, wenn ich dies ausführen, möchte ich die Ausgabe sein:
Ich möchte in der Lage sein, den Block zu empfangen und den tatsächlichen Code für den Block abrufen, anstatt es auszuführen.
Motivation: Erstellen einer DSL, möchte ich die Mock in eine Reihe von anderen Methodenaufrufen, versteckt aus dem aufrufenden Code - mit vorhandenen Objekten und Methoden ohne Affe sie zu patchen umgewandelt werden.
Alle Ideen dazu wäre großartig!
Dank
Ben
Das scheint cool. Aber im folgenden Beispiel muss ich den definierten Block irgendwie als String erhalten. Wie könnte ich das tun? rubin = "def A \ n setzt 'A' \ n end \ \ ndEF b \ n na \ n end" parser = RubyParser.new ruby2ruby = Ruby2Ruby.new sexp = parser.process (Rubin) Oder Ich habe etwas verpasst? –
Wenn Sie über die 1.9 Kompatibilität nicht besorgt sind, empfehle ich die Antwort von @ mletterle. – austinfromboston