매크로를 작성 했으므로 Logger.info를 사용하고 싶기 때문에 Logger가 필요합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 클라이언트가 Logger를 단독으로 요구하거나 매크로를 사용하여 추가하고 Logger를 요구해야합니다.Elixir : 매크로 내부에 필요
0
A
답변
0
매크로에서 로그에 기록하지 않는 것이 가장 좋은 방법은 입니다. 귀하의 매크로 사용자로서, 로그가 관련없는 정보로 오염되는 것을 원하지 않을 수도 있습니다. 반면에, 그러한 능력을 선택하는 것이 중요 할 수 있습니다. 그건 내가 갈 것이라고 말했다 __using__
매개 변수화 :
use My, log: true
: 필요한 때 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
지금 안전하게 my_log
를 호출 할 수 있습니다 사용자가 명시 적으로 use
에 전달 PARAMS를 통해 로그인 할 수있는 기능이 필요하지 않은 경우
단일 추적 없음은 Logger
이므로 결과 코드가 오염됩니다. 이 [컴파일 시간 퍼지]의 아이디어 (https://hexdocs.pm/logger/Logger.html# 유적부터 함수에 대한 호출에있는`Logger` 작업을 확장
0
로거 호출이 매크로 안에 있어야합니까? 아마도 매크로는 로깅을 수행하는 모듈에 대한 함수 호출로 확장 될 수 있습니다.
매크로 확장에서 로깅을 수행해야하는 경우에는 __using__
매크로를 추가하여 종속성 및 모듈이 필요합니다.
, 간단히 말해서에서 아주 나쁜 생각입니다 모듈 응용 프로그램 구성). – mudasobwa