I thought
@example a + :b
passed the expression :(a + :b) to the internal body of the macro.
But it's not the case:
If I define
macro example(expr)
@show expr
@show dump(expr)
end
Calling @example a + :b prints
expr = :(a + :b)
Expr
head: Symbol call
args: Array(Any,(3,))
1: Symbol +
2: Symbol a
3: Expr
head: Symbol quote
args: Array(Any,(1,))
1: Symbol b
typ: Any
typ: Any
while dump(:(a + :b)) prints
Expr
head: Symbol call
args: Array(Any,(3,))
1: Symbol +
2: Symbol a
3: QuoteNode
value: Symbol b
typ: Any
So although the expression passed to example prints like :(a + :b), it is
not :(a+ :b).
I'm not sure why this is the case.
Is there a way to create, from any expression, the exact expression passed
in a body of macro?