Julia跨文件夹导入模块报错:UndefVarError: foo未定义
解决Julia模块调用的UndefVarError问题
问题根源
你碰到的UndefVarError: foo not defined,核心原因是**include("../pkg1/foo.jl")执行在bar模块的外部作用域**。这意味着foo模块被加载到了Main作用域里,但bar模块内部默认无法直接访问外部作用域的模块或变量,所以在callFoo里找不到foo。
解决方案
下面提供两种可行的修复方式,你可以根据需求选择:
方式1:在bar模块内导入Main作用域的foo
修改bar.jl代码,在模块内部明确导入Main下的foo模块:
include("../pkg1/foo.jl") module bar # 导入Main作用域中的foo模块 using Main.foo function callFoo() val1 = mul2(2) # 导入后可以直接用函数名,或者保留foo.mul2也可行 println(val1) end end
如果不想直接导入函数,也可以用import Main.foo,之后依然通过foo.mul2(2)调用。
方式2:将include放到bar模块内部
如果希望foo模块仅在bar内部可见(避免污染Main作用域),可以把include语句移到bar模块里面:
module bar # 在模块内部执行include,让foo模块属于bar的作用域 include("../pkg1/foo.jl") function callFoo() val1 = foo.mul2(2) println(val1) end end
验证效果
修改后运行main.jl,控制台会输出4,说明模块调用成功。
内容的提问来源于stack exchange,提问作者theHemmingway
相关产品推荐
相关产品推荐

