跳到主要内容

模块与引用

Sii 语言通过 sharecite 关键字实现代码的全局分享和引用,支持函数和类的模块化组织。

分享

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);

注意事项

  1. 文件路径:使用字符串字面量指定文件路径,支持相对路径和绝对路径
  2. 类型安全:引用时必须确保类型匹配,编译器会进行类型检查
  3. 运行时支持:需要运行环境支持模块加载机制
  4. 命名冲突:引用时注意避免命名冲突,可以使用别名解决

完整示例

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);

库管理最佳实践

  1. 版本管理:使用 sii list 查看已安装库,使用 sii update-lib 保持库最新
  2. 依赖管理:在项目文档中记录所需的库及其版本
  3. 库开发:遵循语义化版本规范,确保向后兼容性

通过 sharecite 机制,Sii 语言实现了简洁而强大的模块化编程能力。