我尝试使用@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错误也不会影响你。