Julia中如何在模块2内调用模块1的函数(报t1未定义错误)
报错根因
触发UndefVarError: t1 not defined是两个基础概念混淆导致的:
t1只是存储代码的文件名,不是Julia识别的模块名。你在t1.jl里实际定义的模块名是A,Julia不会自动把文件名映射为模块名,写using .t1自然找不到对应模块。- 就算模块名写对,你没有在模块A里导出
soma函数,直接调用也会报函数未定义的错误。
修正后代码
第一个文件 t1.jl
给需要对外暴露的函数加export声明:
module A export soma function soma(a::Int64, b::Int64) return a + b end end
第二个文件 t2.jl
include会把目标文件的代码直接插入到当前语句位置,插入后当前作用域下存在的是模块A,引用时要写对模块名,前面加.表示引用当前作用域内的子模块:
module B include("t1.jl") using .A function main() s = soma(2, 3) println(s) end main() end
关键规则说明
include(文件路径)的作用是把目标文件的代码原封不动嵌入到当前调用位置,不会自动生成和文件名同名的模块,模块名以文件内实际定义的module xxx的名字为准。- 引用当前代码内定义的子模块时,模块名前必须加
.,否则Julia会去全局包环境里找同名的外部包。 - 如果不在模块内用
export导出目标函数,就算using了模块,也不能直接写函数名调用,需要加模块前缀写成A.soma(2,3)的形式。
内容的提问来源于stack exchange,提问作者Leonil Sulude
相关产品推荐
相关产品推荐

