Elixir-Makros und bind_quoted

8

Ich habe ein Makro, das ein Modul wie folgt definiert.

%Vor%

Die Ausgabe von running ist:

%Vor%

Was macht Sinn? MacroFun.define_module wurde in Runner.run aufgerufen, daher wurde das Modul definiert und somit unter dem Modul Runner verschachtelt.

Aber jetzt, wenn ich MacroFun.define_module ändere, um die Option :bind_quoted zu verwenden:

%Vor%

Die Ausgabe wird jetzt:

%Vor%

Warum ??

    
cjbottaro 20.01.2016, 00:19
quelle

2 Antworten

7

Ich denke, das liegt daran, dass Sie an der Stelle wo die Variable name aufheben (binden).

Im ersten Fall heben Sie die Variable name auf, wenn Sie ein Modul erstellen. Wenn Sie also die Variable binden möchten, müssen Sie den Kontext überprüfen (prüfen Sie, ob sich der Code in einem anderen Modul befindet). So erhalten Sie Ihr aktuelles Atom und den entsprechenden Kontext: Runner.Foo .

Im zweiten Fall heben Sie die Variable name auf, bevor sie in einem Kontext platziert wird. Daher ändert sich ihr Wert nicht und es wird das Atom Foo (kein Kontext) angezeigt.

    
Alexander De Sousa 20.01.2016, 18:49
quelle
0

Mit diesem Code sehen Sie die korrekten Werte, die zum Erstellen der Module verwendet wurden:

%Vor%

Ausgabe:

%Vor%     
Leonardo Pessoa 22.12.2016 19:59
quelle

Tags und Links