2015-03-17 9 views
8

Ich vermute, es ist eine elementare Frage, aber es war schwer, eine prägnante, kanonische Antwort online zu finden.Elixir - Was macht das Schlüsselwort 'use'?

Von was ich verstehe;

  • Es ist verschieden von sowohl ‚erfordern‘ und ‚Import‘
  • Es den Inhalt der Module zu importieren, verwendet wird.
  • Es ist jemand ein Makro

klären kann?

+1

Für was es wert ist @SasaJuric eine ausgezeichnete Reihe von Blog-Posts über Makros tat, und er deckt die Verwendung Aussage hier in der Tiefe: http : //www.theerlangelist.com/2014/06/understanding-elixir-macros-part-2.html –

+1

Warum gibt es ein Erlang-Tag auf diesem? – zxq9

+0

Dargestellt könnte es eine anständige Anzahl von Leuten geben, die sich für beide Sprachen interessieren. Auch konnte nicht sicher sein, ob es eine äquivalente Funktion in Erlang selbst gab, oder es ist eine virtuelle Maschine. – Charlie

Antwort

20

Es require s das angegebene Modul und ruft dann den __using__/1 Callback auf, damit das Modul Code in den aktuellen Kontext injizieren kann. Siehe http://elixir-lang.org/docs/v1.0/elixir/Kernel.html#use/2.

Beispiel:

defmodule Test do 
    use Utility, argument: :value 
end 

das ist etwa gleich wie

defmodule Test do 
    require Utility 
    Utility.__using__(argument: :value) 
end 
+0

Prost für die Antwort. Eine weiterführende Frage ... Wenn ich Mix zum Einrichten einer neuen OTP-App verwende, muss ich die Module, die ich im Ordner/lib erstelle, verwenden/importieren/importieren? denn nach dem Kompilieren sieht es so aus, als könnte ich (zB) A.B.method von A.C ohne explizite Import-Anweisung aufrufen. – Charlie

+3

'require' hat nichts mit Funktionen zu tun, es macht nur die Makros aus dem' require''-Modul für den aktuellen lexikalischen Bereich verfügbar. http://elixir-lang.org/getting-started/aliass-require-and-import.html –

+1

Solange Ihre Dateien kompiliert sind, können Sie jede Funktion aufrufen, indem Sie 'Module.Funktionsname' vollständig angeben. Wenn Sie den Import verwenden, können Sie 'function_name' verwenden und das' Module' weglassen, das für Fälle, in denen Sie beispielsweise Funktionen eines bestimmten Moduls in einer Datei verwenden, sauberer ist. –