我尝试使用@which
,但这将我带到GitHub上的代码页面,但是我想知道计算机中的显式路径,即调用函数时使用的文件。例如broadcast(+, A, A)
,其中A
是一个数组,我认为路径是:
C:\Users\user\AppData\Local\Julia-0.6.3\share\julia\base\broadcast.jl
但是当我编辑它时,更改了一些返回值,然后使用该函数,没有任何更改,这使我认为它不是所需的文件。
答案 0 :(得分:3)
这是对(已)总结已写在注释中的内容的尝试。
在进行任何操作之前,如@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_EDITOR
设置为例如来告诉Julia您最喜欢的编辑器是什么, vim
,您可以使用@edit 3+3
在正确的文件中获取编辑器实例,并在本地行。
(请注意,有一个URL bug on Windows会导致标准库中方法的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错误也不会影响您。