Let’s consider the macro @mymacro
which parses some input arguments which are separated by commas as shown below.
macro mymacro(expr...)
# ... does something with expr
return expr
end
@mymacro(x' = x, x∈X, dim=1)
If I use parentheses around the input argument, they are parsed as a Tuple
, i.e. (:(x' = x), :(x ∈ X), :(dim = 1))
which is exactly what I like to obtain.
However, if I call the macro like this
@mymacro x' = x, x∈X, dim=1
because I like to leave out the parentheses which created to Tuple
to reduce the verbosity of the macro, the input argument are parsed totally different. Because the precedence of =
is higher than the one of ,
, the inputs are parsed as (:(x' = ((x, x ∈ X, dim) = 1)),)
.
Is there a “best” or an “official” way to transform the parsed input (:(x' = ((x, x ∈ X, dim) = 1)),)
obtaining from calling the macro without parantheses to the desired (:(x' = x), :(x ∈ X), :(dim = 1))
for an arbitrary number of comma separated inputs?