如何在Julia1.6中重新加载正在开发的模块?
我知道这个问题之前已经被问过和回答过,但是很多答案都没有像描述的那样适合我。
重新加载我在 Julia (1.6) 中处理的模块的过程是什么?
例如,我有
module MyModule
export letters
const letters = String('A':'Z')
end
我希望能够加载模块,letters在模块的文件中进行更改,然后重新加载模块并将这些更改反映在letters. 这看起来很简单,但我无法让它工作。
我试过了
include("src/MyModule.jl")
using .MyModule
但是如果我改变lettersin的定义MyModule.jl然后
include("src/MyModule.jl")
letters不会改变,除非我每次都用Main.MyModule.letters:完全限定它的使用using Main.MyModule; letters,例如,指旧定义。
我如何重新加载正在开发的模块,以便我可以在不完全限定它们的情况下引用它的定义(并且没有总是存在不合格的影子定义)?
回答
我只想使用Revise.jl并将所有内容包装在函数中:
module MyModule
export letters
letters(char_start, char_end) = char_start:char_end |> String
end
julia> using Revise
julia> includet("src/MyModule.jl")
julia> using .MyModule
julia> letters('l', 'p')
"lmnop"
module MyModule
export letters
letters(char_start, char_end) = char_start:char_start |> String
end
julia> letters('l', 'p')
"l"
const用于定义您不想修改的内容,因此我不希望您的原始版本按预期工作。如果您尝试更改它,Revise.jl 也应该抛出重新定义错误
但总的来说,将所有内容放在一个包中并使用通常的using/import语法通常会更好(也更容易!)。PkgTemplates.jl非常适合这个
如果您想重新定义常量,我绝对建议您查看Pluto.jl