1
次のコードで2つのマクロを定義しようとしていますが、それは** (CompileError) iex:12: undefined function name/0
で失敗しました。 関数ブロックname
はdoブロック内で引用符で囲まれません。defmacro
です。エリクシール:リストを変数として使用して複数のマクロを定義する方法は?
この理由は何ですか? これを解決する方法はありますか?
(エリクサーのバージョンは1.2.5です)
defmodule IEx.MyHelpers do
def default_env do
__ENV__
end
[:functions, :macros] |> Enum.each(fn name ->
defmacro unquote(name)(option \\ :all) do
import MapSet
quote do
case unquote(option) do
x when x in [:a, :all] -> __ENV__ |> Map.take([unquote(name)])
x when x in [:d, :default] -> default_env |> Map.take([unquote(name)])
x when x in [:i, :imported] ->
difference(new(Map.take(__ENV__, [unquote(name)])),
new(Map.take(default_env, [unquote(name)])))
|> MapSet.to_list
end
end
end
end)
end