Ruby - Konvertiere von einem Symbol in eine Variable

8

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.

    
BuddyJoe 06.10.2009, 17:52
quelle

5 Antworten

11

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:

%Vor%     
sepp2k 06.10.2009 17:59
quelle
4

Sie könnten eval

verwenden %Vor%     
madlep 06.10.2009 20:23
quelle
3

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:

%Vor%

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%     
Topher Fangio 06.10.2009 20:23
quelle
1

Meinst du die Variable oder die Accessor-Methode? Sepp2k gab den Namen für eine Instanzvariable; Verwenden Sie für einen Accessor

%Vor%     
Kathy Van Stone 06.10.2009 18:32
quelle
0

Sie können fast sicher nicht. Diese Definition hat keinen Zugriff auf die lokalen Variablen des aufrufenden Bereichs. Wenn Sie etwas ausführlicher erklären möchten, was Sie versuchen, können wir Ihnen vielleicht eine nützliche Alternative bieten.

    
Chuck 06.10.2009 17:56
quelle

Tags und Links