如何在使用REPL时在Julia 1.5中重新加载代码



很抱歉有一个基本的初学者问题,但我真的很难解决一个关于Julia的问题,它是REPL。

我想使用";类似MATLAB的";同时尝试和编码的工作流程。我只想在多个文件中分割代码/函数,并将它们组合成一个脚本:

include("file1.jl") # defines Module1
include("file2.jl") # defines Module2
using .Module1
using .Module2

但不知何故,如果不重新启动REPL,似乎不可能重新加载这些模块中定义的代码。我尝试使用CCD_ 1和";跟踪包括";includet,但对我不起作用。

是否有人遇到过类似的问题并找到了有效的解决方案?

这种问题似乎经常发生(例如在这里),Julia的启动时间/重新编译时间太慢,这加剧了它的烦恼。

更新

好吧,也许我在Stackoverflow上的帖子写得有点快。我做了一些实验,现在我发现:

  • 如果避免using,它的工作更加可靠
  • 然后includetinclude工作
  • 特别是常量是一个问题,不能在全局命名空间(?)中重新定义一次

Tasos Papastylianou的答案很有效。如果你有一个模块,比如说,名为Mymod,文件名是Mymod.jl。一开始你做

include("Mymod.jl")
using Mymod

然后你稍微更改了Mymod.jl,为了重新加载Mymod以反映这些更改,你只需执行include("Mymod.jl")并再次使用Mymod,我的意思是只重复

include("Mymod.jl")
using Mymod

这一次Mymod被重新加载,你会看到你所做的改变。至少它适用于Julia 1.6.1。您不必使用类似";修订";。

如果您只是在文件中保留函数定义,那么当您再次包含该文件时,这些函数定义应该会被覆盖/重新定义。

如果你的文件是模块,你不需要做using来使用它。当你包含文件时,模块会得到"定义的";本地,就好像您在REPL中键入了它一样。只需将模块名称用作标识符即可使用其功能。如果您更改文件中的模块并再次"包含"它,julia会警告您,它正在用同名的新模块替换该模块,仅此而已。

关于在脚本中使用"include"、与世界号码等,有几件事需要注意。。。但在您所讨论的上下文中,即在REPL中复制matlab/倍频程工作流,这应该不是问题。

最新更新