In Julia kann die methods
Funktion verwendet werden, um die Methoden einer Funktion abzurufen.Wie kann ich die Methoden eines Julia-Makros abrufen?
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
Makros können auch mehrere Methoden haben.
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"
""
jedoch die methods
Funktion scheint nicht auf Makros zu arbeiten, weil Julia zuerst das Makro aufruft, aufgrund der Tatsache, dass sie Klammern nicht brauchen.
julia> methods(@g)
ERROR: MethodError: no method matching @g()
Closest candidates are:
@g(::String) at REPL[2]:2
@g(::Int64) at REPL[1]:2
Ich habe versucht, eine Expr
ITZUNG mit dem Makro enthalten, aber das hat nicht funktioniert.
julia> methods(:@g)
# 0 methods for generic function "(::Expr)":
Wie kann ich die Methoden eines Makros abrufen?
'Methoden (eval (Symbol („@ g“)))' arbeitete für mich, aber es muss eine sauberere Methode –
Reiniger (ohne 'eval'):' Methoden (Main. (Symbol ("@ g"))) ' –
@DanGetz Schön. Aber ja, da * sollte * eine sauberere Methode sein ... (Übrigens, 'Main. (Symbol (" @ g "))' ist veraltet, und 'getfield (Main, Symbol (" @ g ")' sollte) stattdessen verwendet werden.) –