首页 > 解决方案 > 如何在 Julia 1.6 中重新加载正在开发的模块?

问题描述

我知道这个问题之前已经被问过和回答过,但没有一个像描述的那样对我有用。

重新加载我在 Julia (1.6) 中工作的模块的过程是什么?

例如,我有

module MyModule

export letters

const letters = String('A':'Z')

end

我希望能够加载模块,letters在模块的文件中进行更改,然后重新加载模块并将这些更改反映在letters. 这看起来很简单,但我无法让它工作。

我试过了

include("src/MyModule.jl")
using .MyModule

但是如果我改变lettersinMyModule.jl然后的定义

include("src/MyModule.jl")

letters不会改变,除非我每次都用Main.MyModule.letters:完全限定它的使用using Main.MyModule; letters,例如,引用旧定义。

如何重新加载正在开发的模块,以便我可以在不完全限定它们的情况下引用它的定义(并且没有总是存在不合格的影子定义)?

标签: julia

解决方案


我只会使用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


推荐阅读