Ich verstehe nicht, wie Sie Variablenwert von außerhalb der Methode mit binding
und eval
ändern. Beispiel Methode:Ruby: Ändern der Variablen außerhalb der Methode
def foo
a = 1
binding
end
kann ich Variable a
auf zwei Arten erhalten:
foo.local_variable_get(:a) #=> 1
# or
foo.eval("a") #=> 1
Aber ich kann nicht neuen Wert
foo.local_variable_set(:a, 2)
foo.local_variable_get(:a) #=> still 1
foo.eval("a = 2")
foo.local_variable_get(:a) #=> still 1
jedoch eingestellt, ich kann es tun, wenn Bindung Objekt wurde im globalen Gültigkeitsbereich außerhalb jeder Methode erstellt:
bar = 123
binding # Binding object with global scope
binding.eval("bar") #=> 123
binding.eval("bar = 456")
binding.eval("bar") #=> 456
Wie kann ich einen neuen Wert für die Methode lokale Variable außerhalb der Methode festlegen? Vielen Dank.
Die erste Frage stellt ist, warum tun Sie von außerhalb es eine lokale Variable in einer Methode ändern möchten? Vielleicht verstehen Sie den Unterschied zwischen lokalen, Instanz-, Klassen- und globalen Variablen nicht? Das klingt nach einem "[XY-Problem] (https://meta.stackexchange.com/q/66377/153968)", wo Sie nach einer Sache fragen, aber wirklich nach einer anderen fragen sollten. Erklären Sie das Ziel, warum Sie dies im Rahmen Ihres Programms tun möchten. –
Das ergibt keinen Sinn. Eine lokale Variable wird verwendet, um Werte innerhalb der Methode zu speichern, die keine Persistenz außerhalb der Methode benötigen. Sie werden zerstört, sobald die Methode beendet wird. Wo würden Sie vorschlagen, dass diese Veränderung in einer Methode stattfindet? Bei der Initialisierung des lokalen? Midstream an irgendeiner zufälligen oder willkürlichen Stelle? Ich würde empfehlen, uns einen Codeausschnitt zu zeigen, der zeigt, wie Sie sich vorstellen, solche Funktionen zu verwenden. –
@theTinMan, ich habe darüber [hier] gelesen (https://ruby-doc.org/core-2.0/Binding.html#local_variable_set-method) und versuchte ähnliches Beispiel in irb. Ich will es nur verstehen. – tbard