Julia'da, methods
işlevi, bir işlev yöntemlerini almak için kullanılabilir.Julia makrosunun yöntemlerini nasıl edinebilirim?
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
Makrolar ayrıca birden çok yöntem içerebilir.
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"
""
Ancak methods
fonksiyon Julia ilk dolayı onlar parantez gerekmez olması nedeniyle, makro çağırır çünkü makrolar üzerinde çalışmak için görünmüyor.
julia> methods(@g)
ERROR: MethodError: no method matching @g()
Closest candidates are:
@g(::String) at REPL[2]:2
@g(::Int64) at REPL[1]:2
Ben makro içerecek bir
Expr
Ession kullanarak çalıştı, ancak bu işe yaramadı.
julia> methods(:@g)
# 0 methods for generic function "(::Expr)":
Makro yöntemlerini nasıl alabilirim?
'yöntemleri (eval (Sembol ("@ g")))' benim için çalıştı, ama daha temiz bir yöntem olmalıdır –
Temizleyici ('eval' olmadan): 'yöntemleri (Ana. (Symbol (" @ g "))) –
@DanGetz Nice. Ama evet, * daha temiz bir metot olmalı * (Bu arada, “Ana.” (Symbol ("@ g")), "anlamsız ve" getfield (Main, Symbol ("@ g")) yerine kullan.) –