5
Juliaでは、関数のメソッドを取得するのに、methods
関数を使用できます。Juliaマクロのメソッドを取得するにはどうすればよいですか?
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> methods(@g)
ERROR: MethodError: no method matching @g()
Closest candidates are:
@g(::String) at REPL[2]:2
@g(::Int64) at REPL[1]:2
マクロを格納するためにExpr
セッションを使用しようとしましたが、これは機能しませんでした。
julia> methods(:@g)
# 0 methods for generic function "(::Expr)":
マクロのメソッドを取得するにはどうすればよいですか?
'メソッド(evalの(記号(「@ gは」)))'私のために働いたが、クリーナークリーナー方法 –
がなければなりません( 'eval'なし):'メソッド(Main。(Symbol( "@ g"))) ' –
@DanGetz Nice。しかし、メイン(Symbol( "@ g")) 'は推奨されておらず、' getfield(Main、Symbol( "@ g") 'は、代わりに使用してください)。 –