2016-08-07 30 views

Antwort

4

@ oxinaboxs Antwort ist korrekt. Um hinzuzufügen, typeof(f).name.mt.name ist der Ersatz v0.5 für f.env.name. Das kann nützlich sein, um die . zu vermeiden, die auftritt, wenn nur string auf eine Funktion angewendet wird, die in einem nicht-stdlib-Modul eingeführt wird. Es gibt auch Base.function_name(f), die wahrscheinlich weniger wahrscheinlich ist, wenn die Julia-Version sich ändert.

Um das Modul, in dem eine Funktion (Typ) eingeführt wird, und nicht die Module der einzelnen Methoden zu erhalten, gibt es typeof(f).name.module oder die wahrscheinlich bessere Version Base.function_module(f). Das Modul der Methodentabelle ist wahrscheinlich dasselbe; das kann durch typeof(f).name.mt.module erhalten werden.

anzumerken, dass in f.env v0.4 eine direkte Äquivalent typeof(f).name.mt ist, so auf die gleiche v0.4 f.env.name und f.env.module anzuwenden.

+0

'Base.function_name (f)' und 'Base.function_module (f)' sehen wie eine perfekte Lösung für Julia 0.5 aus. Vielleicht haben Sie auch eine Lösung für den Modulnamen in Julia 0.4? – ffriend

+0

@ffriend Sicher, fügte einen zusätzlichen Absatz hinzu. –

+0

Ah, habe es nicht zuerst verstanden. Vielen Dank! – ffriend

5

-Name ist einfach: Symbol(f) oder string(f) wenn Sie einen String

Modul ist möchten, wie Sie pro Methode sein, wissen, gehen (das heißt pro Typ Signatur). methods(f) mit return eine Methodentabelle, die alle Methoden und wo sie sind, in Bezug auf Dateien ausgibt.

Sie können [meth.module for meth in methods(f)] tun

es Module zu erhalten, also ein Beispiel zu verwenden, die collect Funktion.

julia> using DataStructures #so we have some non-Base definitions 

julia> Symbol(collect) 
:collect 

julia> methods(collect) 
# 5 methods for generic function "collect": 
collect(r::Range) at range.jl:813 
collect{T}(::Type{T}, itr) at array.jl:211 
collect(itr::Base.Generator) at array.jl:265 
collect{T}(q::DataStructures.Deque{T}) at /home/ubuntu/.julia/v0.5/DataStructures/src/deque.jl:170 
collect(itr) at array.jl:236 

julia> [meth.module for meth in methods(collect)] 
5-element Array{Module,1}: 
Base 
Base 
Base 
DataStructures 
Base 

julia> first(methods(collect, (Deque,))).module 
DataStructures 
+0

Looks mit finden können, danke! Gibt es eine Möglichkeit, das Methodenmodul in Julia 0.4 zu finden? – ffriend

+0

@ffriend Die hier vorgestellte Lösung funktioniert genauso wie v0.4. –

0

nicht genau die Antwort, aber eng miteinander verbunden: Sie die Dateinamen und die Zeilennummer von f gut functionloc(f)