Skip to content

Latest commit

 

History

History
70 lines (55 loc) · 1015 Bytes

5_1_quote_and_unquote.md

File metadata and controls

70 lines (55 loc) · 1015 Bytes

Quote and UnQuote

AST - Abstract Syntax Tree

say_to(:David, "Hello!")
↓ Tuple - exposes to ↓
{:say_to, [], [:David, "Hello!"]}
Function name, [metadata], [list of subsequent notes]

Quote Macro

# Integer
iex> quote do: 1
1

# String
iex> quote do: "Hello"
"Hello"

# List
iex> quote do: [1,2,3,4]
[1, 2, 3, 4]

# Tuple
iex> quote do: {:a, 2}
{:a, 2}

# Map
iex> quote do: %{a: 2} 
{:%{}, [], [a: 2]}

iex> quote do: [a: 2, b: "Hello"]
[a: 2, b: "Hello"]

iex> quote do
...> hello(1, name)
...> end
{:hello, [], [1, {:name, [], Elixir}]}

Unquote Macro

quote do: 1 + 2
↓ Tuple ↓
{:+, [...], [1,2]}
iex> quote do: unquote(1+2)
3
iex> name = "David"
"David"

iex> quote do: unquote(name)
"David"

iex> quote do
...> name
...> end
{:name, [], Elixir}

iex> quote do
...> hello(unquote(name), 20)
...> end
{:hello, [], ["David", 20]}