gpt4 book ai didi

julia - 如何在 Julia 1.6 中重新加载正在开发的模块?

转载 作者:行者123 更新时间:2023-12-04 12:32:09 25 4
gpt4 key购买 nike

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

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

比如我有

module MyModule

export letters

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

end

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

我试过了

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

但如果我在 MyModule.jl 中更改 letters 的定义,然后

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

关于julia - 如何在 Julia 1.6 中重新加载正在开发的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68321642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com