Macros 在Julia中,如何显示宏的内容?

Macros 在Julia中,如何显示宏的内容?,macros,julia,Macros,Julia,例如,我想看看@time宏的“内部”是什么。我该怎么做呢?我不认为有一种内置的方法可以做到这一点,但您可以在代码库中搜索 这听起来像是一个有用的功能,因此除非有人纠正我的错误并且它已经存在,否则您可以随时打开一个问题请求它。虽然它不显示宏本身,但您可以使用查看宏扩展的结果。例如: julia> macroexpand(:(@time rand(10))) :(begin # util.jl, line 38: local #60#b0 = Base.gc_bytes()

例如,我想看看@time宏的“内部”是什么。我该怎么做呢?

我不认为有一种内置的方法可以做到这一点,但您可以在代码库中搜索


这听起来像是一个有用的功能,因此除非有人纠正我的错误并且它已经存在,否则您可以随时打开一个问题请求它。

虽然它不显示宏本身,但您可以使用查看宏扩展的结果。例如:

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)

在本例中,它还显示了它的定义位置(util.jl,第38行),但这并不总是发生。由于宏本身不是第一类对象,因此诸如
/
编辑的
/
(或其宏等价物)等实用程序不起作用。

至少从0.5开始,您也可以
@less
宏:

julia> @less @time x
将打开一个编辑器,其中显示代码

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