模块与引用
Sii 语言通过 share 和 cite 关键字实现代码的全局分享和引用,支持函数和类的模块化组织。
分享
share 关键字用于向全局分享函数和类,使其可以被其他文件引用。
分享函数
share func add(a: int, b: int): int {
back a + b;
}
share func multiply(x: int, y: int): int {
back x * y;
}
分享类
share class User {
id: int;
name: string;
age: int;
}
share class Calculator {
result: int;
}
限制说明
share仅支持func(函数)和class(类)- 不支持分享变量、常量或对象
引用
cite 关键字用于引用其他文件中分享的函数和类,以及外部库。
外部库引用
提示
版本要求:该功能从 v1.2.1 开始支持
Sii 支持引用外部库,系统会自动选择最新版本。
语法:
// 引用外部库,需要注意的是引用来源必须为`lib.库名`
cite { 模块名 } from lib.库名;
// 使用库中的函数
let result: float = math.sin(3.14159);
print(result);
库文件命名规则:
- 库文件以
库名-版本号.sii格式存储(如:math-0.0.1.sii) - 导入时只需指定库名,系统自动选择最新版本
- 版本号采用语义化版本格式(X.X.X)
本地文件引用
cite 关键字用于引用其他文件中分享的函数和类。
基本语法
cite 默认名 from "文件路径";
cite { 命名1, 命名2 } from "文件路径";
cite 默认名, { 命名1, 命名2 } from "文件路径";
使用示例
文件:math.sii
share func add(a: int, b: int): int {
back a + b;
}
share func subtract(a: int, b: int): int {
back a - b;
}
share class Calculator {
result: int;
}
文件:main.sii
// 引用命名导出
cite { add, Calculator } from "./math.sii";
// 使用引用的函数
let result: int = add(5, 3);
print(result);
// 使用引用的类
crob calc = new Calculator();
calc.result = 10;
print(calc.result);
混合引用示例
// 同时引用默认导出和命名导出
cite math, { add, subtract } from "./math.sii";
// 使用默认导出
let mathUtil = math;
// 使用命名导出
let sum: int = add(10, 20);
let diff: int = subtract(20, 10);
注意事项
- 文件路径:使用字符串字面量指定文件路径,支持相对路径和绝对路径
- 类型安全:引用时必须确保类型匹配,编译器会进行类型检查
- 运行时支持:需要运行环境支持模块加载机制
- 命名冲突:引用时注意避免命名冲突,可以使用别名解决
完整示例
utils.sii
share func formatName(first: string, last: string): string {
back first + " " + last;
}
share class Person {
firstName: string;
lastName: string;
}
app.sii
cite { formatName, Person } from "./utils.sii";
crob user = new Person();
user.firstName = "张";
user.lastName = "三";
let fullName: string = formatName(user.firstName, user.lastName);
print(fullName);
库管理最佳实践
- 版本管理:使用
sii list查看已安装库,使用sii update-lib保持库最新 - 依赖管理:在项目文档中记录所需的库及其版本
- 库开发:遵循语义化版本规范,确保向后兼容性
通过 share 和 cite 机制,Sii 语言实现了简洁而强大的模块化编程能力。