朱莉娅:如何创建一个 returns 其参数的宏?
Julia: How do I create a macro that returns its argument?
我的问题与 this one 非常相似,但有所不同。我想创建一个以这种方式运行的宏(或其他):
julia> @my-macro x + 2
:(x + 2)
(注意 x + 2 是 而不是 括在引号中)。朱莉娅有类似的东西吗?如果没有,我该怎么做? (请详细解释其工作原理。)
宏的输入表达式需要被引用,因为宏 returns 一个表达式,它被计算,而你想得到表达式本身,因此你需要一个额外的引用。引用可以这样完成:
macro mymacro(ex)
Expr(:quote,ex) # this creates an expression that looks like :(:(x + 2))
end
e=@mymacro x + 2 #returns :(x + 2)
另一种较短的可能性:
macro mymacro(ex)
QuoteNode(ex)
end
e = @mymacro x + 2 #returns :(x + 2)
我的问题与 this one 非常相似,但有所不同。我想创建一个以这种方式运行的宏(或其他):
julia> @my-macro x + 2
:(x + 2)
(注意 x + 2 是 而不是 括在引号中)。朱莉娅有类似的东西吗?如果没有,我该怎么做? (请详细解释其工作原理。)
宏的输入表达式需要被引用,因为宏 returns 一个表达式,它被计算,而你想得到表达式本身,因此你需要一个额外的引用。引用可以这样完成:
macro mymacro(ex)
Expr(:quote,ex) # this creates an expression that looks like :(:(x + 2))
end
e=@mymacro x + 2 #returns :(x + 2)
另一种较短的可能性:
macro mymacro(ex)
QuoteNode(ex)
end
e = @mymacro x + 2 #returns :(x + 2)