|
|||
class Binding |
|
Binding
kapseln den Ausführungskontext an einem bestimmten Ort
im Code und halten ihn für einen zukünftigen Gebrauch vor. Variablen, Methoden und Wert von self
sowie möglicherweise ein Iterator-Block, auf die in diesem Kontext zugegriffen werden kann, bleiben alle
erhalten.
Binding-Objekte können mit Kernel#binding
erstellt werden, und werden durch einen Rückaufruf von Kernel#set_trace_func
erreicht.
Solche Binding-Objekte können als zweites Argument von
Kernel#eval
-Methodenaufrufen
übergeben werden, wobei eine Umgebung für die Ausführung bereitgestellt wird.
class Demo |
||
def initialize(n) |
||
@secret = n |
||
end |
||
def getBinding |
||
return binding() |
||
end |
||
end |
||
|
||
k1 = Demo.new(99) |
||
b1 = k1.getBinding |
||
k2 = Demo.new(-3) |
||
b2 = k2.getBinding |
||
|
||
eval("@secret", b1) |
» | 99 |
eval("@secret", b2) |
» | -3 |
eval("@secret") |
» | nil |