模块
简介
Julia 中的模块(module)
是一些互相隔离的可变工作空间,会引入新的全局作用域。模块允许创建顶层定义(也称为全局变量),而无需担心命名冲突
在模块中,利用导入(importing)
控制其它模块中的哪些名称是可见的;利用导出(exporting)
控制自己的模块中哪些名称是公开的
模块的类型是Module
标准模块
Core
包含了语言内置的所有功能Base
包含了绝大多数情况下都会用到的基本功能Main
是顶层模块,当 julia 启动时,也是当前模块(@__MODULE__
)
语法
使用module ... end
声明一个模块,它会默认导入Base
和Core
特别地,可以使用baremodule ... end
从而不导入Base
,也不在本地定义eval
和include
基础示例:
julia> module Foo
export Bar # 建议不缩进
module Bar # 模块可以嵌套
greet()=println("Hello!")
end
end
Main.Foo
julia> N=Foo # 模块也可以这样赋值
Main.Foo
julia> N
Main.Foo
julia> typeof(N)
Module
julia> N.Bar.greet()
Hello!
导出
使用export x1,x2
导出
需注意的是,无法导出含有指定参数列表的函数
导入
import Foo
导入Foo
模块,在调用时需使用Foo.x(3)
import Foo.x,y
导入Foo
中的x
和y
import FastOnlineOpen as Foo
在调用时使用Foo
简写using Foo
导入Foo
模块,在调用时若无歧义可以使用x(3)
using Foo.Bar:a,b
导入Foo
的子模块Bar
中的a
和b
重载
重载其它模块中的函数示例
julia> module X
export q
q(x::Int)=x
end
Main.X
julia> using Main.X
julia> X.q(x::Int)=x+1
julia> q(2)
3