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

如何在REPL中打印Julia中的函数代码?,julia,introspection,Julia,Introspection,在Julia中,许多与基函数和更密切相关的函数也是用纯Julia编写的,代码很容易获得。您可以浏览存储库或本地下载的文件,了解该函数是如何编写/实现的。但我认为allready有一些内置方法可以为您实现这一点,因此您可以在REPL或Jupyter笔记本中编写如下内容: @code functioninquestion() 然后得到如下结果: functioninquestion(输入::类型) 一些计算 返回 结束 无需对代码进行分页。 我只是不记得方法或调用。我已经阅读了手册中的反思/内省

在Julia中,许多与基函数和更密切相关的函数也是用纯Julia编写的,代码很容易获得。您可以浏览存储库或本地下载的文件,了解该函数是如何编写/实现的。但我认为allready有一些内置方法可以为您实现这一点,因此您可以在REPL或Jupyter笔记本中编写如下内容:

@code functioninquestion()

然后得到如下结果:


functioninquestion(输入::类型)
一些计算
返回
结束
无需对代码进行分页。
我只是不记得方法或调用。我已经阅读了手册中的反思/内省部分,但我似乎无法使用其中的任何内容。我尝试了
方法
方法
降低
扩展
,但似乎无法让它们满足我的需求-

这目前不受支持,但将来可能会得到支持。

尽管这可能不是OP想要的,
@less
阅读底层代码非常方便(因此我经常使用它)。比如说,

julia> @less 1 + 2
给予

它对应于

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

@edit functioninquestion()
将打开编辑器,找到给定方法的位置。 获取
@edit
使用的相同信息并使用它打开文件并跳到方法定义,然后直接在REPL(或Jupyter)中显示它可能并不难。
编辑:当我回答问题时,其他人提到了
@less
,这似乎正是你想要的。

现在有了另一个工具。它是Revise.jl的一部分(同时使用Revise时效果更好)。与@edit/@less不同,它应该在Jupyter内部工作,并使用REPL中定义的函数。

这在技术上是正确的
@edit
@less
依赖于函数中的回溯信息,只指向定义它们的文件。当然,如果函数是在Jupyter笔记本或REPL中定义的,那么这是行不通的。或者,它可能会显示自Julia加载后已更改的陈旧代码。我不知道为什么会在这里投反对票。OP曾询问过查看Base中的代码,Stefan的回答没有回答这个问题。提出Jupyter笔记本或REPL中定义的代码问题,或者可能过时的问题,是对其他答案的有益补充,尽管它可能与OP无关。我尝试了
@更少的洗牌!()
但它不起作用。。。。但是如果我给
洗牌一个参数,然后它工作,所以它有点工作。。。虽然代码下面有几行。谢谢@wpkzz
@少洗牌!()
自然不起作用,因为您随后要求查看响应无参数洗牌函数调用的方法。那是不存在的,所以你什么也得不到。你必须给它一个实际的参数,比如
@less shuffle!([1,2])
。请记住,在Julia中,每个函数都有多个方法实现,具体取决于传递的参数。Julia需要知道你的论点,才能选择向你展示的方法。让Julia development的人员直接回答这些问题非常好。
julia> @which 1 + 2
+(x::Int64, y::Int64) at int.jl:8