Ich schrieb ein Makro, und ich möchte Logger.info darin verwenden, also muss ich Logger anfordern. Was ist die beste Vorgehensweise, um dies zu tun? Obligieren Sie den Client, um Logger eigenständig zu benötigen, oder fügen Sie Makro hinzu und fordern Sie Logger dort an.Elixier: benötigt in einem Makro
Antwort
Die beste Vorgehensweise wäre nicht aus Ihren Makros plötzlich zu protokollieren. Als Benutzer Ihres Makros möchte ich mein Protokoll möglicherweise nicht mit irrelevanten Informationen belasten. Auf der anderen Seite könnte dies eine wichtige Rolle spielen, um eine solche Möglichkeit zu haben. Das heißt, ich gehen würde, mit einem parametrisierte __using__
:
defmodule My do
defmacro __using__(opts \\ [log: false]) do
quote do
if unquote(opts)[:log], do: require Logger
defmacro my_log(what) do
if unquote(opts)[:log] do
Logger.info(what)
end
end
...
end
end
end
Jetzt können Sie sicher my_log
rufen bei Bedarf und wenn der Benutzer nicht verlangt ausdrücklich die Möglichkeit, über params zu use
weitergegeben zu protokollieren:
use My, log: true
keine einzige Spur von Logger
wird den resultierenden Code verschmutzen.
Muss sich der Logger-Aufruf innerhalb des Makros befinden? Vielleicht kann das Makro zu einem Funktionsaufruf zu einem Modul erweitert werden, das dann die Protokollierung durchführt.
Wenn es wirklich notwendig ist, die Protokollierung von der Makroerweiterung durchzuführen, dann würde ich ein __using__
Makro hinzufügen, um Abhängigkeiten und Ihr Modul zu erfordern.
- 1. Elixier definieren dynamische Funktionen innerhalb Makro
- 2. Makro benötigt, um nächste beste Zahl
- 3. sublime: Elixier Ergebnisse in einem externen Terminal
- 4. Iterationstypen in einem Makro
- 5. Wie eine globale Variable in Elixier Modul in Elixier
- 6. ClassImp-Präprozessor-Makro in ROOT - Wird es wirklich benötigt?
- 7. Elixier: Versuch, die Ausgangssignale zu fangen
- 8. Ordnungsgemäße Methode zur Verwendung in einem Makro
- 9. Render Helper in Elixier
- 10. Elixier in Erlang Transformation
- 11. Wie in Elixier
- 12. Anwendung in Elixier beginnend
- 13. encodeURIComponent in Elixier
- 14. Concatenate Tupeln in Elixier
- 15. Wie ein # in einem Makro
- 16. Mehrere Anweisungen in einem Makro
- 17. Verwendung von # in einem Makro
- 18. Warum wird das doppelte Pfund an einem Ort benötigt, aber nicht die anderen in diesem Makro?
- 19. Verwenden von Elixier in Lumen
- 20. auswerten C Makro __LINE__ in einem anderen Makro
- 21. Kann ich ein Makro mit einem Makro in C definieren?
- 22. Elixier - Wie kann ich ein Array von Funktionen in meinem Makro aufheben?
- 23. Elixier: Dynamischer Infix-Operator
- 24. Verwendung des Capture - Operators in einem Regenschirm app - elixier
- 25. Elixier/Erlang - Nanosleep
- 26. Elixier Tight-Loop beschleunigen
- 27. Wrapping-Methode in einem Makro in C++
- 28. Was ist "|>" in Elixier?
- 29. HTTPOISON - einfügen Körperparameter in Elixier
- 30. Laichen einen Prozess in Elixier
Erweiterung jeder 'Logger' Betrieb zu einem Aufruf einer Funktion ist eine sehr schlechte Idee auf den Punkt gebracht, da es die Idee von [Kompilierung Spülung] Ruinen (https://hexdocs.pm/logger/Logger.html# Modul-Anwendung-Konfiguration). – mudasobwa