julia - 如何在 Julia 1.6 中重新加载正在开发的模块?
问题描述
我知道这个问题之前已经被问过和回答过,但没有一个像描述的那样对我有用。
重新加载我在 Julia (1.6) 中工作的模块的过程是什么?
例如,我有
module MyModule
export letters
const letters = String('A':'Z')
end
我希望能够加载模块,letters
在模块的文件中进行更改,然后重新加载模块并将这些更改反映在letters
. 这看起来很简单,但我无法让它工作。
我试过了
include("src/MyModule.jl")
using .MyModule
但是如果我改变letters
inMyModule.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非常适合这个
但是,如果您想重新定义 const,我绝对建议您查看Pluto.jl