如何在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


以上是如何在Julia1.6中重新加载正在开发的模块?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>