如何获得Julia函数的显式路径



我尝试使用@which,但它会将我带到GitHub上的一个带有代码的页面,但我想知道我的计算机中的明确路径,即调用函数时使用的文件。例如broadcast(+, A, A),其中A是一个数组,我认为路径是:

C:UsersuserAppDataLocalJulia-0.6.3sharejuliabasebroadcast.jl

但当我编辑它时,更改了一些值返回,然后使用该函数,没有任何更改,这让我认为它不是所需的文件。

这是一种尝试(在某种程度上(总结注释中已经写过的内容。

正如@daycaster正确提到的那样,在重新编译系统映像之前,对基本源文件的更改不会生效。所以,你给出的路径实际上是正确的。

在REPL中,使用@which将告诉您函数的定义位置(基本文件的名称和行号(:

julia> @which 3+3
+(x::T, y::T) where T<:Union{Int128, Int16, Int32, Int64, Int8, UInt128, UInt16, UInt32, UInt64, UInt8} in Base at int.jl:53

整数加法在本地julia安装的base文件夹中的int.jl的第53行中定义。在Jupyter(可能也在Juno?(中,这是自动可点击的,并将带您进入github上的相应行。

如果您告诉Julia您最喜欢的编辑器是什么,通过将JULIA_EDITOR设置为例如vim,您可以使用@edit 3+3在本地的正确文件和行中获取编辑器实例。

(请注意,Windows上有一个URL错误,导致标准库中方法的URL不正确。(

无论如何,正如@BogumiłKamiński所提到的,你可能一开始就不应该修改julia源。只需在打开的Julia会话中"覆盖"相关方法(如果您希望这是本地永久性的,可以在startup.jl中进行(:

julia> inv(3)
0.3333333333333333
julia> Base.inv(x::Integer) = begin println("JUHU!"); float(one(x)) / float(x) end
julia> inv(3)
JUHU!
0.3333333333333333

如果(出于一些神秘的原因(你真的想在基本源文件中进行更改,你可以使用Revise.jl,正如@Gnimuc所提到的。这看起来像这样:

julia> using Revise
julia> Revise.track(Base)
julia> inv(3)
0.3333333333333333
julia> @edit inv(3) # make a change
julia> inv(3)
JUHU!
0.3333333333333333

然而,这与自己重写方法没有太大区别。它也不会是永久性的。

更新:我刚刚意识到你还在0.6。在这种情况下,该文件不是startup.jl,而是juliarc.jl。此外,Windows URL错误也不会影响你。

相关内容

  • 没有找到相关文章

最新更新