gpt4 book ai didi

module - 在 Julia 的另一个模块中包含一个模块

转载 作者:行者123 更新时间:2023-12-04 16:54:11 24 4
gpt4 key购买 nike

我在文件中定义了一个模块。这个 Module1 定义了我在主脚本中使用的结构和函数。我使用 include("module1.jl") 将此模块包含在另一个父模块中,以便父模块可以使用模块 1 中的结构和函数。但是,我在命名空间方面遇到了问题。这是单个文件中的示例:

#this would be the content of module.jl
module Module1
struct StructMod1
end
export StructMod1
function fit(s::StructMod1)
end
export fit
end

module Parent
#including the module with include("Module1.jl")
module Module1
struct StructMod1
end
export StructMod1
function fit(s::StructMod1)
end
export fit
end
#including the exports from the module
using .Module1
function test(s::StructMod1)
fit(s)
end
export test
end

using .Parent, .Module1

s = StructMod1
test(s)



ERROR: LoadError: MethodError: no method matching test(::Type{StructMod1})
Closest candidates are:
test(::Main.Parent.Module1.StructMod1)

如果我删除 Parent 中包含的模式并使用 Using ..Module1 以便它从封闭范围加载,我会收到此错误
ERROR: LoadError: MethodError: no method matching test(::Type{StructMod1})

Closest candidates are:
test(::StructMod1) at ...

最佳答案

在您的示例中,s是类型对象而不是 StructMod1 类型的对象.为了s要成为后者,您需要调用该类型的构造函数。所以你应该写s = StructMod1()而不是 s = StructMod1 .

您可以阅读更多关于类型作为第一类对象的信息 here .

关于module - 在 Julia 的另一个模块中包含一个模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59494521/

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