2016-08-07 16 views

Odpowiedz

4

@ Odpowiedź Oxinabox jest poprawna. Aby dodać, typeof(f).name.mt.name jest zamiennikiem v0.5 dla f.env.name. Może to być przydatne, aby uniknąć ., która występuje, gdy po prostu zastosowanie string do funkcji wprowadzonej w module non-stdlib. Istnieje również Base.function_name(f), która prawdopodobnie nie będzie się zepsuć, gdy zmieni się wersja Julii.

Aby uzyskać moduł, do którego wprowadzono funkcję (typ), a nie moduły poszczególnych metod, istnieje typeof(f).name.module lub prawdopodobnie lepsza wersja, Base.function_module(f). Moduł tabeli metod jest prawdopodobnie taki sam; które można uzyskać przez typeof(f).name.mt.module.

Należy pamiętać, że f.env w wersji 0.4 jest bezpośrednim odpowiednikiem typeof(f).name.mt, więc w wersji v0.4 obowiązują te same f.env.name i f.env.module.

+0

'Base.function_name (f)' i 'Base.function_module (f)' wyglądają jak idealne rozwiązanie dla Julia 0.5. Może masz również rozwiązanie dla nazwy modułu w Julia 0.4? – ffriend

+0

@ffriend Oczywiście, dodano dodatkowy akapit. –

+0

Ah, nie dostałem tego pierwszy. Dzięki! – ffriend

5

Nazwa jest proste: Symbol(f) lub string(f) jeśli chcesz ciąg

modułu jest, jak wiadomo będzie za metody (czyli za podpis typu). methods(f) z zwracaną tabelą metod, która wypisuje wszystkie metody i ich położenie, pod względem plików.

Można zrobić [meth.module for meth in methods(f)] się tam dostać moduły

więc używać przykład, funkcja collect.

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

Wygląda dobrze, dzięki! Czy istnieje również sposób na znalezienie modułu metody w Julii 0.4? – ffriend

+0

@ffriend Rozwiązanie przedstawione tutaj działa dokładnie tak samo, jak w wersji v0.4. –

0

Niezupełnie odpowiedź, ale ściśle związane: można znaleźć nazwę pliku i numer wiersza f użyciu functionloc(f)

Powiązane problemy