2014-05-01 21 views

Antwort

1

Ich glaube nicht, dass es eine eingebaute Möglichkeit dafür gibt, aber Sie können die Codebasis für "macro X" suchen.

Das klingt, als wäre es ein nützliches Feature. Wenn also jemand mich korrigiert und es bereits existiert, könnten Sie immer ein Problem damit öffnen.

7

Während es das Makro selbst nicht anzeigt, können Sie die Ergebnisse der Makroerweiterung mit macroexpand sehen. Zum Beispiel:

julia> macroexpand(:(@time rand(10))) 
:(begin # util.jl, line 38: 
     local #60#b0 = Base.gc_bytes() # line 39: 
     local #61#t0 = Base.time_ns() # line 40: 
     local #62#val = rand(10) # line 41: 
     local #63#t1 = Base.time_ns() # line 42: 
     local #64#b1 = Base.gc_bytes() # line 43: 
     Base.println("elapsed time: ",Base./(Base.-(#63#t1,#61#t0),1.0e9)," seconds (",Base.-(#64#b1,#60#b0)," bytes allocated)") # line 44: 
     #62#val 
    end) 

In diesem Fall zeigt es Ihnen auch, wo sie definiert ist (util.jl, Zeile 38), aber das ist nicht immer geschieht. Da Makros selbst keine Objekte der ersten Klasse sind, funktionieren die Dienstprogramme wie which/edit/less (oder ihre Makroäquivalente) nicht.

1

Mindestens seit 0.5 können Sie @less Makros zu:

julia> @less @time x 

wird mit einem Editor öffnen, die den Code zeigt

macro time(ex) 
    quote 
     local stats = gc_num() 
     local elapsedtime = time_ns() 
     local val = $(esc(ex)) 
     elapsedtime = time_ns() - elapsedtime 
     local diff = GC_Diff(gc_num(), stats) 
     time_print(elapsedtime, diff.allocd, diff.total_time, 
        gc_alloc_count(diff)) 
     val 
    end 
end 
Verwandte Themen