很抱歉有一个基本的初学者问题,但我真的很难解决一个关于Julia的问题,它是REPL。
我想使用";类似MATLAB的";同时尝试和编码的工作流程。我只想在多个文件中分割代码/函数,并将它们组合成一个脚本:
include("file1.jl") # defines Module1
include("file2.jl") # defines Module2
using .Module1
using .Module2
但不知何故,如果不重新启动REPL,似乎不可能重新加载这些模块中定义的代码。我尝试使用CCD_ 1和";跟踪包括";includet
,但对我不起作用。
是否有人遇到过类似的问题并找到了有效的解决方案?
这种问题似乎经常发生(例如在这里),Julia的启动时间/重新编译时间太慢,这加剧了它的烦恼。
更新
好吧,也许我在Stackoverflow上的帖子写得有点快。我做了一些实验,现在我发现:
- 如果避免
using
,它的工作更加可靠 - 然后
includet
和include
工作 - 特别是常量是一个问题,不能在全局命名空间(?)中重新定义一次
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/倍频程工作流,这应该不是问题。