模块系统 #
一、模块基础 #
1.1 定义模块 #
julia
module MyModule
export greet, add
greet(name) = println("Hello, $name!")
add(a, b) = a + b
_internal(x) = x * 2
end
1.2 使用模块 #
julia
using .MyModule
greet("Julia")
add(1, 2)
1.3 导入模块 #
julia
import .MyModule: greet, add
greet("Julia")
add(1, 2)
二、导入与导出 #
2.1 export #
export使名称在使用using时可用:
julia
module Shapes
export Circle, Rectangle, area
struct Circle
radius::Float64
end
struct Rectangle
width::Float64
height::Float64
end
area(c::Circle) = π * c.radius^2
area(r::Rectangle) = r.width * r.height
end
2.2 using #
using导入所有导出的名称:
julia
using .Shapes
c = Circle(5.0)
area(c)
2.3 import #
import导入特定名称:
julia
import .Shapes: Circle, area
c = Circle(5.0)
area(c)
2.4 限定访问 #
使用模块名限定访问:
julia
c = Shapes.Circle(5.0)
Shapes.area(c)
三、模块嵌套 #
3.1 嵌套模块 #
julia
module Outer
export outer_func
outer_func() = println("Outer function")
module Inner
export inner_func
inner_func() = println("Inner function")
end
end
3.2 访问嵌套模块 #
julia
using .Outer
using .Outer.Inner
outer_func()
inner_func()
四、标准库模块 #
4.1 常用标准库 #
julia
using LinearAlgebra
using Statistics
using Random
using Printf
using Dates
using DelimitedFiles
using Serialization
4.2 LinearAlgebra #
julia
using LinearAlgebra
A = [1 2; 3 4]
det(A)
inv(A)
eigvals(A)
4.3 Statistics #
julia
using Statistics
data = [1, 2, 3, 4, 5]
mean(data)
std(data)
median(data)
4.4 Random #
julia
using Random
Random.seed!(42)
rand(5)
randn(5)
shuffle([1, 2, 3, 4, 5])
4.5 Printf #
julia
using Printf
@printf("Integer: %d\n", 42)
@printf("Float: %.2f\n", 3.14159)
@printf("String: %s\n", "Julia")
4.6 Dates #
julia
using Dates
now()
today()
Date(2024, 1, 1)
DateTime("2024-01-01T12:00:00")
五、模块最佳实践 #
5.1 模块结构 #
julia
module MyPackage
using PackageA
using PackageB
import Base: show
export public_func, PublicType
const CONSTANT = 100
struct PublicType
field::Int
end
function public_func(x)
_private_helper(x)
end
function _private_helper(x)
x * 2
end
end
5.2 导入顺序 #
julia
module MyModule
using StandardLibrary
using ThirdPartyPackage
import Base: show
export public_api
end
5.3 避免命名冲突 #
julia
module MyModule
import Base: show
show(io::IO, x::MyType) = ...
end
六、实践练习 #
6.1 练习1:数学工具模块 #
julia
module MathTools
export fibonacci, is_prime, factorial
fibonacci(n::Int) = n <= 1 ? n : fibonacci(n-1) + fibonacci(n-2)
function is_prime(n::Int)
n < 2 && return false
for i in 2:isqrt(n)
n % i == 0 && return false
end
return true
end
function factorial(n::Int)
n < 0 && error("n must be non-negative")
n <= 1 ? 1 : n * factorial(n - 1)
end
end
using .MathTools
fibonacci(10)
is_prime(17)
factorial(5)
6.2 练习2:字符串工具模块 #
julia
module StringUtils
export reverse_words, word_count, is_palindrome
function reverse_words(s::String)
join(reverse(split(s)), " ")
end
function word_count(s::String)
length(split(s))
end
function is_palindrome(s::String)
cleaned = lowercase(replace(s, r"\W" => ""))
cleaned == reverse(cleaned)
end
end
using .StringUtils
reverse_words("Hello World")
word_count("Hello World Julia")
is_palindrome("A man, a plan, a canal: Panama")
6.3 练习3:配置模块 #
julia
module Config
export get_config, set_config!, load_config!
const _config = Dict{Symbol, Any}()
function get_config(key::Symbol, default=nothing)
get(_config, key, default)
end
function set_config!(key::Symbol, value)
_config[key] = value
end
function load_config!(dict::Dict)
merge!(_config, dict)
end
function list_config()
copy(_config)
end
end
using .Config
set_config!(:host, "localhost")
set_config!(:port, 8080)
get_config(:host)
list_config()
七、总结 #
本章我们学习了:
- 模块定义:module和end
- 导入导出:using、import、export
- 模块嵌套:嵌套模块结构
- 标准库模块:LinearAlgebra、Statistics等
- 最佳实践:模块结构和命名冲突
接下来让我们学习Julia的包管理!
最后更新:2026-03-27