📦 deps(tsl): sync tsl-playbook from f90faa10

Source-Commit: f90faa10c3
This commit is contained in:
ci[bot]
2026-08-13 15:37:54 +08:00
parent 85a9d8ee40
commit 2c38c5fc06
21 changed files with 721 additions and 1825 deletions
@@ -6,7 +6,7 @@
<!-- section-id: syntax-04-001 -->
回答“普通变量怎样直接使用、`var` 在什么位置出现、常量必须怎样初始化、哪些名字一旦绑定就不能再赋值”。
回答“普通变量怎样直接使用、`var` 在什么位置出现、常量必须怎样初始化、`global` 怎样跨函数共享,以及运行时常量怎样冻结一次调用中的表达式结果”。
## 核心规则
@@ -27,6 +27,8 @@
- 右侧数组元素也可以是数组;拆出来的变量会直接得到对应子数组。
- 多参数赋值也可以出现在函数调用参数里。
- `{$explicit+}` 开启后,后续变量必须先用 `var` 声明;未声明变量会报 `variable not defined`
- `global x, y;` 声明当前任务中的全局变量;每个需要访问它的函数都要再次写 `global` 声明。
- `const name := expression;` 是运行时常量:进入所属函数时计算,当前调用内不可再次赋值;不要与编译时常量 `const name = expression;` 混写。
## 可直接照写示例
@@ -178,6 +180,71 @@ const kMaxRetries = 3 + 4;
value := kMaxRetries;
```
### 全局变量 `global`
<!-- section-id: syntax-04-009 -->
<!-- tags: 全局变量, 跨函数共享变量, 不同函数访问同一变量, global 声明 -->
`global` 让同一运行任务中的不同函数访问同一变量。每个需要读写该变量的函数都要声明它;漏写时,同名标识符会按局部变量处理。
代码块身份:可直接照写示例
```tsl
global shared_value;
shared_value := 37;
writeLn(ReadShared());
function ReadShared();
begin
global shared_value;
return shared_value;
end;
```
代码块身份:输出片段
```text
37
```
本节只拥有“当前任务内跨函数共享”和“每个引用函数都要声明”的规则;不要从中推断跨任务持久化、线程隔离或进程级生命周期。
### 运行时常量 `const name := expression`
<!-- section-id: syntax-04-010 -->
<!-- tags: 运行时常量, 表达式常量, 每次调用重新计算, 初始化后不能修改 -->
运行时常量使用 `:=` 初始化,可以依赖参数、变量或函数调用。它在每次进入所属函数时重新计算一次,随后在本次调用内不可修改。
代码块身份:可直接照写示例
```tsl
writeLn(FreezeValue(2));
writeLn(FreezeValue(5));
function FreezeValue(value);
begin
const fixed := value + 1;
return fixed;
end;
```
代码块身份:输出片段
```text
3
6
```
边界:
- 编译时常量写 `const name = expression;`;运行时常量写 `const name := expression;`
- 运行时常量声明放在函数 `begin ... end` 语句体中,不放在函数头后的 `const` 声明段
- 运行时常量不作为类成员写法
- 初始化后再次赋值会破坏常量约束,不要生成
### 多参数赋值
<!-- section-id: syntax-04-006 -->
@@ -331,6 +398,9 @@ items := array(1, 2, 3);
- 以为 `const` 可以只声明名字,不写初始化表达式。
- 以为单变量拆包可以写成 `[a] := array(...)`
- 以为 `{$explicit+}` 开启后仍然可以继续直接写未声明变量。
- 只在脚本顶层声明一次 `global`,却忘记在读取它的函数里再次声明。
- 把运行时常量 `const name := expression;` 写进函数头后的编译时 `const` 声明段。
- 把运行时常量当成可重新赋值的普通变量或类成员。
代码块身份:反例 / 不可照写