在Julia中,
宏也可以有多个方法。
然而,
我尝试使用一个
methods
函数可用于检索函数的方法。julia> f(::Int) = 0
f (generic function with 1 method)
julia> f(::String) = ""
f (generic function with 2 methods)
julia> methods(f)
# 2 methods for generic function "f":
f(::String) in Main at REPL[1]:1
f(::Int64) in Main at REPL[0]:1
宏也可以有多个方法。
julia> macro g(::Int)
0
end
@g (macro with 1 method)
julia> macro g(::String)
""
end
@g (macro with 2 methods)
julia> @g 123
0
julia> @g "abc"
""
然而,
methods
函数似乎无法用于宏,因为Julia首先调用宏,这是因为宏不需要括号。julia> methods(@g)
ERROR: MethodError: no method matching @g()
Closest candidates are:
@g(::String) at REPL[2]:2
@g(::Int64) at REPL[1]:2
我尝试使用一个
表达式
来包含宏,但这并没有起作用。julia> methods(:@g)
# 0 methods for generic function "(::Expr)":
如何检索宏的方法?
methods(eval(Symbol("@g")))
对我来说可行,但一定有更简洁的方法。 - Dan Getzmethods(Main.(Symbol("@g")))
- Dan GetzMain.(Symbol("@g"))
已经被弃用了,应该使用getfield(Main, Symbol("@g"))
代替。) - Harrison Grodin