You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中如何在模块2内调用模块1的函数(报t1未定义错误)

报错根因

触发UndefVarError: t1 not defined是两个基础概念混淆导致的:

  1. t1只是存储代码的文件名,不是Julia识别的模块名。你在t1.jl里实际定义的模块名是A,Julia不会自动把文件名映射为模块名,写using .t1自然找不到对应模块。
  2. 就算模块名写对,你没有在模块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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:45:31