LoginSignup
15
0

More than 1 year has passed since last update.

簡単Elixirシリーズ ~ quoteを理解しよう ~

Posted at

簡単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の内部構造を見ることができます。

15
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
0