2014-05-01 1 views

Répondre

1

Je ne pense pas qu'il existe une manière intégrée de faire cela, mais vous pouvez rechercher la base de code pour "macro X". Cela semble être une fonctionnalité utile, donc à moins que quelqu'un ne me corrige et qu'il existe déjà, vous pouvez toujours ouvrir un problème en le demandant.

7

Bien qu'il ne vous montre pas la macro elle-même, vous pouvez voir les résultats de la macro-expansion avec macroexpand. Par exemple:

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) 

Dans ce cas, il vous montre également où elle est définie (util.jl, ligne 38), mais cela ne se produit pas toujours. Comme les macros ne sont pas des objets de première classe, les utilitaires tels que which/edit/less (ou leurs équivalents macro) ne fonctionnent pas.

1

Au moins depuis 0,5, vous pouvez aussi @less macros:

julia> @less @time x 

ouvrira un éditeur, qui montre le code

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 
Questions connexes