gpt4 book ai didi

module - Julia:将模块拆分为多个文件

转载 作者:行者123 更新时间:2023-12-02 17:05:44 25 4
gpt4 key购买 nike

我正在使用 Julia v0.6.4。考虑以下保存在 FooModule.jl 中的模块:

module FooModule

export Foo
export doSomething

mutable struct Foo
x::Int64
function Foo(xin::Int64)
new(xin)
end # Foo
end # struct

function doSomething(F::Foo)
println(F.x+123)
end # doSomething

end # module

还有一个main.jl:

using FooModule
function main()
F = Foo(10)
doSomething(F)
end # main

现在我启动 Julia REPL:

julia> include("main.jl");

julia> main()
133

即我得到了我所期望的。现在假设 doSomething 包含很多行,我想拆分 FooModule.jl。我想做这样的事情:

module FooModule

export Foo
export doSomething

include("doSomething.jl") # <- include instead of writing out

mutable struct Foo
x::Int64
function Foo(xin::Int64)
new(xin)
end # Foo
end # struct

end # module

doSomething.jl

function doSomething(F::Foo)
println(F.x+123)
end # doSomething

这会产生错误,因为 doSomething.jlFoo 一无所知。

julia> include("main.jl");
ERROR: LoadError: LoadError: LoadError: UndefVarError: Foo not defined
Stacktrace:
[1] include_from_node1(::String) at ./loading.jl:576
[2] include(::String) at ./sysimg.jl:14
[3] include_from_node1(::String) at ./loading.jl:576
[4] eval(::Module, ::Any) at ./boot.jl:235
[5] _require(::Symbol) at ./loading.jl:490
[6] require(::Symbol) at ./loading.jl:405
[7] include_from_node1(::String) at ./loading.jl:576
[8] include(::String) at ./sysimg.jl:14
while loading ~/Desktop/doSomething.jl, in expression starting on line 1
while loading ~/Desktop/FooModule.jl, in expression starting on line 6
while loading ~/Desktop/main.jl, in expression starting on line 1

我该如何解决这个问题?

最佳答案

只需将 include("doSomething.jl") 移动到函数最初所在的位置,即类型定义之后。您可以将 include 视为将代码复制粘贴到文件中。

关于module - Julia:将模块拆分为多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51819338/

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