あなたは、引数の動的なリストを生成したい場合は、あなたがこのようなunquote_splicing
を使用する必要があります。
defmacro warp(name, argument_names, code) do
quote do
def unquote(name)(unquote_splicing(argument_names)) do
unquote(code)
end
end
end
その後
を生成
warp :foo, [a, b], {:ok, a, b}
def foo(a, b), do: {:ok, a, b}
あなたはそれが
foo(1, 2)
# {:ok, 1, 2}
を生成することを呼び出す場合にもunquote_splicing
せずにこのようなマクロを定義して、ちょうどdef
に組み合わせた名前と引数をダウン渡すことができます。
defmacro warp(name_and_args, do: code) do
quote do
def unquote(name_and_args) do
unquote(code)
end
end
end
これは、あなたがする必要があることを意味def
を呼び出すのと同じようにwarp
を呼び出します。
warp foo(a, b), do: {:ok, a, b}
I ' 'unquote_splicing 'についてのドキュメントを見つけるのに十分なほど難しい。このタイトルの変更は、私のような将来のGoogle社員にとって役立つかもしれません。 – nicooga