如何在REPL中打印Julia中的函数代码?

时间:2016-06-06 16:22:52

标签: julia introspection

在朱莉娅,许多Base和更近的相关功能也都是用纯Julia编写的,代码很容易实现。可以浏览存储库或本地下载的文件,并查看函数的编写/实现方式。但是我认为已经有一些内置的方法可以帮助你,所以你可以在REPL或Jupyter Notebook中编写类似的东西:

@code functioninquestion()

得到类似的东西:

functioninquestion(input::Type) some calculations return end 没有分页通过代码。 我只是不记得方法或电话。我已经阅读了手册的反思/反思部分,但我似乎无法在那里使用任何东西。我已经尝试过methodsmethodswithcode_loweredexpand,似乎无法让他们给出我想要的东西 -

4 个答案:

答案 0 :(得分:7)

目前尚不支持,但未来可能会支持。

答案 1 :(得分:7)

虽然这可能不是OP所寻求的,但julia> @less 1 + 2 读取底层代码非常方便(所以我经常使用它)。例如,

+(x::Int, y::Int) = box(Int,add_int(unbox(Int,x),unbox(Int,y)))

给出

julia> @which 1 + 2
+(x::Int64, y::Int64) at int.jl:8

,对应于

给出的行
Order:
    db:
        Status: Enum('Unpaid, Paid, Cancelled','Unpaid')

答案 2 :(得分:4)

@edit functioninquestion()会将您的编辑器打开到给定方法的位置。 可能不会很难获取@edit使用的相同信息并使用它来打开文件并跳转到方法定义,然后直接在REPL(或Jupyter)中显示它。 编辑:当我回答时,其他人提到@less,这似乎完全符合您的要求。

答案 3 :(得分:0)

现在有另一种工具https://github.com/timholy/CodeTracking.jl。它是Revise.jl的一部分(在同时使用Revise时效果更好)。与@ edit / @ less不同,它应该可以在Jupyter内部并使用REPL中定义的功能。