2017-11-11 4 views
2

Ich habe gerade in Julia über das Weltalter erfahren und muss sagen, dass dieses Konzept einige Zeit brauchen wird. Um mir dabei zu helfen, damit umzugehen, könnte es nützlich sein, das Weltalter in einigen Beispielen explizit zu sehen . Gibt es einen einfachen Weg, dies zu tun?Einfache Möglichkeit, das Weltalter der Funktion in Julia zu bekommen?

Ich denke, ich könnte irgendwie meine Beispiele so machen, dass sie immer in einen Fehler des Weltalters geraten, aber ich hatte gehofft, dass es einen weniger verrückten Weg gibt, dies zu erreichen.

+0

Auslösen eines World-Age-Fehlers und Überprüfen des Stack-Trace für die Funktion, die ihn aufgerufen hat, und wie er diese Information zum Ausdrucken erhalten hat. –

+0

Mit Ihrem Ansatz fand ich, dass 'ccall (: jl_get_world_counter, UInt,())' gibt Ihnen das aktuelle Weltalter, aber ich konnte nicht den Ort finden, wo sie die Funktion Weltalter lesen. – gTcV

Antwort

2

Das folgende ist hack-ish und arbeitet auf 0.6.1, wird aber wahrscheinlich später brechen:

min_world(f) = (methods(f)).ms[1].min_world 

macro cur_world() 
    :(min_world(x -> $(rand())*x)) 
end 

Und es funktioniert wie folgt:

julia> f(x) = 2x 
f (generic function with 1 method) 

julia> @cur_world() 
21827 

julia> g(x) = sqrt(x) 
g (generic function with 1 method) 

julia> @cur_world() 
21829 

julia> min_world(f) 
21826 

julia> min_world(g) 
21828 

die Welt-Alter-Zähler Mit in jedem echten Code klingt wie der falsche Weg zu gehen.

Verwandte Themen