Wie kann ich: obj zurück in eine Variable namens obj innerhalb des def?
%Vor%UPDATE : Der endgültige Code ist aufwendiger als das, aber ...
Ich mag es, sagen zu können
%Vor%statt
%Vor%Ich arbeite an einer DSL-ähnlichen Syntax. Und diese eine Änderung würde die Dinge etwas klarer lesen lassen.
Welche Art von Variable ist obj
in Ihrem Beispiel? Wenn es sich um eine lokale Variable des Bereichs handelt, in dem foo aufgerufen wird, kann nicht von innen auf foo zugegriffen werden, es sei denn, Sie übergeben die aktuelle Bindung als zweiten Parameter.
Wenn Sie auf die Instanzvariable @obj
zugreifen möchten, ist es einfach:
Es ist ein bisschen seltsam, aber wenn Sie bereit sind, einen leeren Block zu übergeben (oder wenn Sie sowieso einen übergeben), können Sie die Bindung aus dem Block abrufen, dann eval
aufrufen und die Bindung übergeben:
Dies wird 3 drucken.
Alternativ dazu hat ActiveSupport anscheinend etwas namens Binding.of_caller, das Sie möglicherweise verwenden können, damit Sie den Block nicht übergeben müssen, aber ich weiß nicht, wie gut es funktioniert.
Eine andere Alternative ist, foo aufzurufen und die Bindung zu übergeben:
%Vor%Meinst du die Variable oder die Accessor-Methode? Sepp2k gab den Namen für eine Instanzvariable; Verwenden Sie für einen Accessor
%Vor%Tags und Links ruby metaprogramming