簡単Elixirシリーズ
~ quoteを理解しよう ~
この記事は「Elixir Advent Calendar 2022」3日目の記事です
東京にいるけどfukuokaexのYOSUKEです。
簡単 Elixirシリーズでは小ネタをサクッと書いていこう。というコンセプトで作っていきます。
今回は、quoteって何? を理解する。という小ネタ(そう、この記事はサクッとがコンセプトW)
quoteとは何でしょうか? 公式サイトの以下を見ればわかります。終了 シーン。。。
ですが、公式は英語だし、一応こちらにも僕なりの説明で書いておきます。
説明にASTの話しが出るので、ASTの解説を先にしておくと、Wikiより
通常の構文木(具象構文木あるいは解析木とも言う)から、言語の意味に関係ない情報を取り除き、意味に関係ある情報のみを取り出した(抽象した)木構造の木である
quoteとは
- Elixirは内部表現として抽象構文木(AST)を利用しています。
- quoteはElixirの式をASTで評価します。
- 評価は、1.関数名、2 番目はメタデータを含むキーワード リスト、3 番目は引数リスト の要素を持つ、タプルにします。
- ただし、タプル,リスト、アトム、数値リテラル、文字リテラル の5つだけはリテラルの値をそのまま返します。
quoteとは上記4つの性質を持つマクロです。
要素を返すシンプルなパターンを見てみましょう。
quote do: sum(1,2,3)
{:sum, [], [1, 2, 3]}
メタデータを返すパターンを見てみましょう。
quote do: def hello(), do: "hello"
{:def, [context: Elixir, import: Kernel],
[{:hello, [context: Elixir], []}, [do: "hello"]]}
ようするに、quoteを利用することで、Elixirの内部構造を見ることができます。