模块

简介

Julia 中的模块(module)是一些互相隔离的可变工作空间,会引入新的全局作用域。模块允许创建顶层定义(也称为全局变量),而无需担心命名冲突

在模块中,利用导入(importing)控制其它模块中的哪些名称是可见的;利用导出(exporting)控制自己的模块中哪些名称是公开的

模块的类型Module

标准模块

Core包含了语言内置的所有功能

Base包含了绝大多数情况下都会用到的基本功能

Main是顶层模块,当 julia 启动时,也是当前模块(@__MODULE__

语法

使用module ... end声明一个模块,它会默认导入BaseCore

特别地,可以使用baremodule ... end从而不导入Base,也不在本地定义evalinclude

基础示例:

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中的xy

import FastOnlineOpen as Foo在调用时使用Foo简写

using Foo导入Foo模块,在调用时若无歧义可以使用x(3)

using Foo.Bar:a,b导入Foo的子模块Bar中的ab

重载

重载其它模块中的函数示例

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