Julia模块导入规则:如何让部分对象直接调用、部分需加模块名?
解决Julia模块导出控制:让部分对象可直接调用,部分需通过模块名访问
首先修正你代码中的语法错误:Julia定义struct和function时不需要结尾加冒号:,这是常见的新手误区。
按照你的需求,只需在模块中**只导出MyStruct,不导出fnc**即可实现目标,修改后的my_module.jl代码如下:
module my_module # 仅导出MyStruct,fnc不加入export列表 export MyStruct struct MyStruct foo bar end function fnc(x) println(x) end end # 结束模块定义
原理说明
export关键字的作用是标记哪些对象可以在using导入模块后直接访问,未被export的对象必须通过模块名.对象名的方式调用。- 这和你使用
HTTP包的逻辑完全一致:HTTP.request未被导出,所以必须加模块前缀;如果HTTP中有导出的对象(比如某些自定义类型),就可以直接调用。
在main.jl中的使用示例
using my_module # MyStruct已导出,直接调用创建实例 my_obj = MyStruct(123, "abc") println(my_obj.bar) # 输出 "abc" # fnc未被导出,必须通过模块名限定访问 my_module.fnc("你好,Julia") # 输出 "你好,Julia"
内容的提问来源于stack exchange,提问作者CutePoison
相关产品推荐
相关产品推荐

