Ruby: Name der Variablen erhalten [Duplikat]

8

Wie kann ich einen variablen Namen bekommen? Z. B.

%Vor%

Anfangszweck:

%Vor%

Mein Versuch:

%Vor%     
ted 26.03.2013, 13:39
quelle

2 Antworten

2

Erstens können Sie keine puti implementieren und puti a_var direkt aufrufen, um die Ausgabe als a_var = value of a_var zu erhalten. Am Rumpf von puti sieht Ruby nur die formalen Parameternamen von puti , es kann nicht die tatsächlichen Parameternamen ableiten.

In einer anderen Sprache wie C / C ++ können Sie Makro um Ihre puti zu implementieren. Das ist eine andere Geschichte.

Sie können jedoch put :a_var mit Hilfe von Continuation implementieren. In einer anderen Frage " Können Sie Code im Kontext eines Aufrufers in Ruby einlesen? ", Sony Santos hat eine caller_binding Implementierung, um die Bindung des Aufrufers (etwas wie die Perl-Aufruferfunktion) zu erhalten.

Die Implementierung sollte etwas geändert werden, da callcc den Rückgabewert des Blocks bei seiner ersten Rückgabe zurückgibt. Sie erhalten also eine Instanz von Continuation anstatt von nil . Hier ist die aktualisierte Version:

%Vor%

Beachten Sie, dass puti nicht die letzte Anweisung Ihres Programms sein sollte, andernfalls wird der Ruby-Interpreter sofort beendet und die Trace-Funktion hat keine Chance zu laufen. Das ist der Punkt der letzten "Platzhalter" -Linie.

    
Arie Xiao 26.03.2013, 14:43
quelle
8

Sie müssen die Bindung des aktuellen Variablenbereichs übernehmen, die Sie mit der Binding-Klasse :

%Vor%

Die Methode binding() gibt ein Binding-Objekt an, das sich an dem Punkt, an dem die Methode aufgerufen wurde, den Kontext merkt. Anschließend übergeben Sie eine Bindung an eval() und werten die Variable in diesem Kontext aus.

    
Jon Cairns 26.03.2013 14:03
quelle

Tags und Links