在模块中包装代码

module 关键字可用于开始一个模块,该模块允许对代码进行组织和命名。模块可以定义外部接口,通常由 exported 符号组成。为了支持这种外部接口,模块可以具有未公开的内部功能和不适合公共使用的类型

一些模块主要用于包装类型和相关函数。按照惯例,这些模块通常以类型名称的复数形式命名。例如,如果我们有一个提供 Building 类型的模块,我们可以调用这样一个模块 Buildings

module Buildings

immutable Building
    name::String
    stories::Int
    height::Int  # in metres
end

name(b::Building) = b.name
stories(b::Building) = b.stories
height(b::Building) = b.height

function Base.show(io::IO, b::Building)
    Base.print(stories(b), "-story ", name(b), " with height ", height(b), "m")
end

export Building, name, stories, height

end

然后该模块可以与 using 语句一起使用:

julia> using Buildings

julia> Building("Burj Khalifa", 163, 830)
163-story Burj Khalifa with height 830m

julia> height(ans)
830