如何在Julia中给宏取别名

3

我希望给宏起一个别名。我的当前实现方法是创建一个新的宏,并调用并传递参数,例如:

macro print(xs...)
  quote
    @show $(xs...)
  end
end

有没有更好/内置的方法来实现这个功能?

很棒的问题!我也有同样的疑问。 - Julia Learner
2个回答

6
在 Julia 1.3 中,您可以使用 var"@macroname" 语法,如下所示:
var"@print" = var"@show"

那么,@show 将被有效地别名为 @print


3
应该也应该是constconst var"@print" = var"@show" - HarmonicaMuse

5
你还可以这样做:
julia> @eval const $(Symbol("@print")) = $(Symbol("@show"))
@show (macro with 1 method)

julia> @print 1 + 1
1 + 1 = 2
2

感谢您展示了获取宏引用的两种方法。我在https://docs.julialang.org/en/stable/manual/metaprogramming中没有看到这些内容。 - Phuoc
3
不要假设事物在“Main”中可用,绑定也应该被设置为“const”。类似于@eval const $(Symbol("@print")) = $(Symbol("@show"))这样的写法更简单,不需要假设宏在“Main”中可用,只要它在分配的作用域内可用即可。 - fredrikekre
@fredrikekre 谢谢,好多了!我只知道用getfield来做这件事,因为TotalVerb曾经向我展示过,这是该表达式展开并降低的方式。 - HarmonicaMuse
@fredrikekre 很好的回答了我也有同样问题的疑问。谢谢! - Julia Learner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接