elixirのマクロで渡された変数にアクセスしたい
elixirの勉強中に思った疑問なのですが、マクロについて分からないことがあります。
変数atoms
とvalues
があったとして、その2つを受け取って、そのatoms
のアトムの名前でvalues
の値を束縛するマクロを書こうとしたのですが、うまく書くことができませんでした。
マクロで渡されたASTが変数の場合、その変数の値にアクセスして、その値に応じたASTを返すことはできるのでしょうか?
具体的には
atoms = [:a, :b, :c]
values = ["one", "two", "three"]
assign(atoms, values)
IO.puts a #=> one
IO.puts b #=> two
IO.puts c #=> three
というコードがうまく動くようなassign
マクロは作れるのでしょうか?
[:a, :b, :c]
と[1, 2, 3]
を直接マクロに渡せばマクロにはリテラルがそのまま渡されるのでそれを使えるのですが、atoms
という変数を渡した場合atoms
という変数を表すASTが渡されてリストの中身にアクセスできない気がします。
ちなみにあくまでただの疑問なのでどうしてもこのマクロを実装したいわけではなく、可能かどうか、可能であればどのような方法になるのかが知りたいです。