gpt4 book ai didi

module - 编辑后如何在事件的 Julia session 中重新加载模块?

转载 作者:行者123 更新时间:2023-12-03 05:49:55 31 4
gpt4 key购买 nike

2018 年更新:请务必检查所有回复,因为多年来此问题的答案已多次更改。在此更新时,Revise.jl 答案可能是最佳解决方案。

我有一个文件“/SomeAbsolutePath/ctbTestModule.jl”,其内容是:

module ctbTestModule
export f1
f1(x) = x + 1
end

我在终端中启动 Julia,它运行“~/.juliarc.jl”。启动代码包括以下行:

push!(LOAD_PATH, "/SomeAbsolutePath/")

因此我可以立即在 Julia 控制台中输入:

using ctbTestModule

加载我的模块。正如预期的那样,f1(1) 返回 2。现在我突然决定要编辑f1。我在编辑器中打开“/SomeAbsolutePath/ctbTestModule.jl”,并将内容更改为:

module ctbTestModule
export f1
f1(x) = x + 2
end

我现在尝试在事件的 Julia session 中重新加载模块。我尝试一下

using ctbTestModule

但是f1(1)仍然返回2。接下来我尝试:

reload("ctbTestModule")

按照建议here ,但 f1(1) 仍返回 2。最后,我尝试:

include("/SomeAbsolutePath/ctbTestModule.jl")

按照建议here ,这理想,因为我必须输入完整的绝对路径,因为当前目录可能不是“/SomeAbsolutePath”。我收到警告消息 警告:替换模块 ctbTestModule 听起来很有希望,但 f1(1) 仍然返回 2

如果我关闭当前的 Julia session ,启动一个新 session ,然后输入 using ctbTestModule,我现在会得到所需的行为,即 f1(1) 返回 3。但显然我想在不重新启动 Julia 的情况下执行此操作。

那么,我做错了什么?

其他详细信息:Ubuntu 14.04 上的 Julia v0.2。

最佳答案

这个问题的基础是重新加载模块的汇合,但无法重新定义模块中的事物Main( see the documentation here )——即是 at least until the new function workspace() was made available 2014 年 7 月 13 日。最新版本的 0.3 预发布版应该有它。

工作空间()之前

考虑以下简单模块

module TstMod
export f

function f()
return 1
end

end

然后使用它......

julia> using TstMod

julia> f()
1

如果函数 f() 更改为 return 2 并重新加载模块,则 f 实际上已更新。但没有在模块 Main 中重新定义。

julia> reload("TstMod")
Warning: replacing module TstMod

julia> TstMod.f()
2

julia> f()
1

以下警告使问题更清楚

julia> using TstMod
Warning: using TstMod.f in module Main conflicts with an existing identifier.

julia> using TstMod.f
Warning: ignoring conflicting import of TstMod.f into Main

使用工作区()

但是,新函数workspace() 会清除Main 准备重新加载TstMod

julia> workspace()

julia> reload("TstMod")

julia> using TstMod

julia> f()
2

此外,之前的 Main 存储为 LastMain

julia> whos()
Base Module
Core Module
LastMain Module
Main Module
TstMod Module
ans Nothing

julia> LastMain.f()
1

关于module - 编辑后如何在事件的 Julia session 中重新加载模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25028873/

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