2016年11月25日金曜日

Elixirのquoteとunquote

Elixirquoteとunquoteです。Elixirのプログラムは、3つの要素を持つタプルとして組み上がるとのこと。 最初の要素は関数名、2番目はメタデータを含むキーワードリスト、3番目は引数リストです。quoteを使用すると、任意の式の表現を得ることができます。unquoteを使用すると、quoteせず、そのまま特定のコードを挿入できます(?)。奥が深くて、難しい。
  1. 関数名
  2. メタデータを含むキーワードリスト
  3. 3番目は引数リスト
iex(1)> 1+2
3
iex(2)> quote do: 1 + 2
{:+, [context: Elixir, import: Kernel], [1, 2]}

iex(3)> IO.puts "hello world"
hello world
:ok
iex(4)> quote do: IO.puts "hello world"
{{:., [], [{:__aliases__, [alias: false], [:IO]}, :puts]}, [], ["hello world"]}

iex(5)> number = 13
13
iex(6)> Macro.to_string(quote do: 11 + number)
"11 + number"
iex(7)> Macro.to_string(quote do: 11 + unquote(number))
"11 + 13"

参考サイト
ElixirのMetaprogrammingに出ているquote(Qiita)

0 件のコメント:

コメントを投稿