2013-06-25 14 views
6

Angenommen, ich habe eine Funktion namens bla irgendwo in meiner Rails App definiert.Gibt es eine Möglichkeit, eine Methodendefinition programmatisch in Rails anzuzeigen (oder zu drucken)?

Gibt es einen Weg in Ruby oder Schienen, durch den ich den Code dynamisch/programmatisch drucken kann, um diese Funktion zu definieren? So zum Beispiel:

def bla 
    puts "Hi There" 
end 

und dann, wenn ich eine Funktion wie nennen, zum Beispiel get_definition:

puts get_definition(:bla) 

würde dies auszudrucken

"puts \"Hi There\"" 

Gibt es eine kanonische Weise zu tun Dies ? Ich musste das vorher nicht wirklich machen, und ich weiß, dass dies in Schienen nicht wirklich üblich ist.

Ich möchte auch nicht meine Methode mit Meta (reflektierende) Programmierung definieren und speichern Sie dann die Zeichenfolge zum Definieren meiner Methode. Jede Hilfe wird geschätzt!

+0

http://StackOverflow.com/a/11544229/1004274 – oldergod

+0

Duplikat von http://StackOverflow.com/Questions/3220623/meta-programming-output-method-body-as-text –

+0

Gute Punkte, scheint es ist ein Duplikat beider Fragen (seltsam, da diese Fragen dann Duplikate von einander sind) ... keiner von ihnen beantwortet meine Frage und keiner von ihnen kann auf Google gefunden werden, wenn ich "programmatisch" suche oder ich hätte beides gefunden. Aber ein Duplikat ist ein Duplikat –

Antwort

1

Ich habe keine Ahnung, worüber John Hyland schreibt. Es gibt keine solche Methode (in reinem Ruby) wie Method#source. Die praktische Lösung ist die Verwendung der pry gem. Es verfügt über Methoden, mit denen Sie auf die Quelle zugreifen können.

+1

Nicht sicher, wer Sie unten gewählt hat, aber ich werde versuchen, die Perle Edelstein auch zu verwenden. @ John-Hyland hat tatsächlich einen guten Punkt, die .source_location-Methode funktioniert unter 1.9.2. Ich muss die .source Methode in 1.9.3 –

+0

@CosminAtanasiu noch prüfen Ja, 'Methode # source_location' ist dort für eine lange Zeit. Wie ich geschrieben habe, gibt es keine Methode wie "Methode # Quelle". Ich habe 1.9.2 sowie 1.9.3 verwendet, und es gab keine solche Methode. Jetzt benutze ich 2.0, und es gibt keine solche Methode. – sawa

+0

Ich werde es in den nächsten Tagen überprüfen –

Verwandte Themen