模块
模块用于将相关的变量和函数组织在一起,避免命名冲突,使代码结构更清晰。
定义模块
使用 mod 关键字定义模块,用 pub 关键字标记需要对外公开的成员:
mod math_utils {
// pub 标记的成员可以从外部访问
pub fn square { it^2 }
pub fn cube { it^3 }
pub const @PI_APPROX = 3.14;
// 没有 pub 的成员是私有的,只能在模块内部使用
fn helper { it * 2 }
// 内部可以使用私有成员
pub fn double_square { helper(it)::square() }
}
debug_print("square(5) =", math_utils.square(5));
debug_print("cube(3) =", math_utils.cube(3));
debug_print("PI ≈", math_utils.@PI_APPROX);
debug_print("double_square(3) =", math_utils.double_square(3)); 访问模块成员
使用 . 访问模块的公开成员:
mod config {
pub let host = "localhost";
pub let port = 8080;
pub let version = "1.0.0";
}
debug_print("服务器: $(config.host):$(config.port)");
debug_print("版本:", config.version); 模块中的可变状态
模块可以包含可变成员,但只能通过模块内部的函数来修改:
mod counter {
pub let mut value = 0;
pub fn increment() {
value += 1;
}
pub fn reset() {
value = 0;
}
}
debug_print("初始值:", counter.value);
counter.increment();
counter.increment();
counter.increment();
debug_print("加三次:", counter.value);
counter.reset();
debug_print("重置后:", counter.value); 信息
注意:不能从外部直接给模块成员赋值(如 counter.value = 10 会报错),必须通过模块提供的函数来修改。
嵌套模块
模块可以嵌套:
mod app {
pub mod database {
pub let connection = "mysql://localhost:3306";
pub fn query(sql) { "执行查询: $sql" }
}
pub mod cache {
pub let mut size = 0;
pub fn add() { size += 1; }
}
}
debug_print(app.database.connection);
debug_print(app.database.query("SELECT * FROM users"));
app.cache.add();
debug_print("缓存大小:", app.cache.size); 遍历模块
可以使用 for 遍历模块的公开成员名:
mod settings {
pub let theme = "dark";
pub let language = "zh-CN";
pub let font_size = 14;
}
for key in settings {
debug_print("$key:", settings[key]);
} 解构模块
可以从模块中提取函数:
mod utils {
pub fn add(x, y) { x + y }
pub fn mul(x, y) { x * y }
}
let (:add, :mul) = utils;
debug_print("add(3, 4) =", add(3, 4));
debug_print("mul(3, 4) =", mul(3, 4)); 内置模块:matrix
MiraScript 提供了 matrix 模块 用于矩阵运算。矩阵用二维数组表示:
let m = [[1, 2], [3, 4]];
debug_print("大小:", matrix.size(m));
debug_print("转置:", matrix.transpose(m)); let a = [[1, 2], [3, 4]];
let b = [[5, 6], [7, 8]];
debug_print("矩阵加法:", matrix.add(a, b));
debug_print("矩阵乘法:", matrix.multiply(a, b)); // 创建特殊矩阵
debug_print("3×3 单位矩阵:", matrix.identity(3));
debug_print("2×3 零矩阵:", matrix.zeros(2, 3)); 小结
mod name { }定义模块,pub标记公开成员- 通过
.访问模块成员 - 可变成员只能通过模块内部函数修改
- 模块可以嵌套,也可以遍历和解构
matrix模块提供矩阵运算功能