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

Bad*_*ild 7 macros julia

例如,我想看看@time宏的"内部"是什么.我该怎么做?

Mat*_* B. 7

虽然它没有显示宏本身,但您可以看到宏扩展的结果macroexpand.例如:

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)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它还会显示它的定义位置(util.jl,第38行),但并不总是这样.由于宏本身不是第一类对象,因此诸如which/ edit/ less(或它们的宏等效项)之类的实用程序不起作用.


one*_*ute 1

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

这听起来像是一个有用的功能,所以除非有人纠正我并且它已经存在,否则您总是可以提出一个请求它的问题。