如何在 Julia 中为宏添加别名

Phu*_*uoc 3 macros julia

我想为宏创建一个别名。我当前的实现是创建一个新的宏来调用并传递参数,例如:

macro print(xs...)
  quote
    @show $(xs...)
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有更好的/内置的方法?

Ans*_*hvi 6

在 Julia 1.3 中,您可以使用var"@macroname"如下语法:

var"@print" = var"@show"
Run Code Online (Sandbox Code Playgroud)

然后,@show将被有效地别名为@print.

  • 可能也应该是 `const`:`const var"@print" = var"@show"`。 (3认同)

Sal*_*apa 5

你还可以这样做:

julia> @eval const $(Symbol("@print")) = $(Symbol("@show"))
@show (macro with 1 method)

julia> @print 1 + 1
1 + 1 = 2
2
Run Code Online (Sandbox Code Playgroud)

  • 你不应该假设“Main”中的东西是可用的,绑定可能也应该是“const”。像 `@eval const $(Symbol("@print")) = $(Symbol("@show"))` 这样的东西要简单得多,并且不假设该宏在 `Main` 中可用——这就足够了它在任务范围内可用。 (3认同)