【发布时间】:2014-09-21 15:01:00
【问题描述】:
2018 年更新:请务必查看所有回复,因为多年来,此问题的答案已多次更改。在本次更新时,Revise.jl 答案可能是最好的解决方案。
我有一个文件“/SomeAbsolutePath/ctbTestModule.jl”,其内容是:
module ctbTestModule
export f1
f1(x) = x + 1
end
我在运行“~/.juliarc.jl”的终端中启动 Julia。启动代码包括以下行:
push!(LOAD_PATH, "/SomeAbsolutePath/")
因此我可以立即在 Julia 控制台中输入:
using ctbTestModule
加载我的模块。正如预期的那样,f1(1) 返回2。现在我突然决定要编辑f1。我在编辑器中打开“/SomeAbsolutePath/ctbTestModule.jl”,并将内容更改为:
module ctbTestModule
export f1
f1(x) = x + 2
end
我现在尝试在我的活动 Julia 会话中重新加载模块。我试试
using ctbTestModule
但f1(1) 仍然返回2。接下来我试试:
reload("ctbTestModule")
如建议的here,但f1(1) 仍返回2。最后,我尝试:
include("/SomeAbsolutePath/ctbTestModule.jl")
按照here 的建议,这不是理想的,因为我必须输入完整的绝对路径,因为当前目录可能不是“/SomeAbsolutePath”。我收到警告消息Warning: replacing module ctbTestModule,这听起来很有希望,但f1(1) 仍然返回2。
如果我关闭当前的 Julia 会话,启动一个新会话,然后输入 using ctbTestModule,我现在会得到所需的行为,即 f1(1) 返回 3。但显然我想这样做 不重新启动 Julia。
那么,我做错了什么?
其他详细信息:Ubuntu 14.04 上的 Julia v0.2。
【问题讨论】:
-
感谢您提供 2018 年更新。仅仅因为
workspace()在 Julia 中存在已经很长时间了,我现在甚至接受 miguelmorin 的答案,而不是以前接受的答案,该答案后来已被弃用。 -
@NoseKnowsAll 老实说,我不确定在这种情况下应该采取什么样的礼仪。接受的答案不一定是正确的。相反,常见问题解答指出它是提问者认为最有帮助的一个。对我来说,这是目前公认的答案。鉴于我在帖子顶部的 2018 年更新将读者引向了正确的方向,我认为最好保持现状。