🐛 fix(tsl-syntax): remove body routing instructions

This commit is contained in:
csh
2026-07-13 09:16:53 +08:00
parent b4d2fc8246
commit 617275e92d
22 changed files with 84 additions and 74 deletions
@@ -67,7 +67,7 @@
- 可以模仿已经出现的代码外形、语句顺序和块级结构。
- 不要从骨架推断未出现的语法、内置函数、部署方式、文件名规则或模块查找规则。
- 需要扩展写法时,先进入对应专题页读取规则
- 扩展写法必须有对应专题事实支持
本页只列最短高频骨架;`procedure`、参数、返回类型和调用细节见 [05_functions_and_calls.md](05_functions_and_calls.md)。
@@ -11,7 +11,7 @@
回答“目标文件到底是 `.tsl` 脚本还是 `.tsf` 可复用声明文件,以及 `.tsl` 里的哪些内容会顺序执行、哪些内容只是后置声明”。
如果问题已经变成具体语法外形,先用本页完成文件模型判断,再跳到对应专题页:函数 / 过程 [05_functions_and_calls.md](05_functions_and_calls.md),类 [08_objects_and_classes.md](08_objects_and_classes.md)`unit` / `uses` [09_units_and_scope.md](09_units_and_scope.md),赋值和表达式 [06_expressions_and_operators.md](06_expressions_and_operators.md)。[01_quickstart.md](01_quickstart.md) 只作为最短骨架和高频硬规则速查。
本页负责文件模型判断;具体语法外形的事实分别见:函数 / 过程 [05_functions_and_calls.md](05_functions_and_calls.md),类 [08_objects_and_classes.md](08_objects_and_classes.md)`unit` / `uses` [09_units_and_scope.md](09_units_and_scope.md),赋值和表达式 [06_expressions_and_operators.md](06_expressions_and_operators.md)。[01_quickstart.md](01_quickstart.md) 只作为最短骨架和高频硬规则速查。
## 智能体文件模型判断流程
@@ -20,7 +20,7 @@
3. 目标仍不明确时先问用户;不要把脚本入口和可复用模块替用户合并成一个猜测文件。
4.`.tsl` 时,先生成脚本语句区;需要函数、过程或类时,把声明区放在语句区之后。
5.`.tsf` 时,生成顶层函数 / 过程 / 类声明,或 `unit`;不要写成会直接顺序执行的脚本入口。
6. 没有文档证据时不要发明文件模型;只能回到对应专题、项目自身文档或项目专属规则,记录文档缺口。
6. 没有文档证据时不要发明文件模型;只能使用对应专题事实、项目自身文档或项目专属规则,否则记录文档缺口。
## 文件模型核心规则
@@ -45,7 +45,7 @@
- 可以模仿已经出现的文件模型、语句顺序和块级结构。
- 不要从示例推断未出现的部署方式、文件名规则或模块查找规则。
- `.tsf` 示例后的输出片段只证明部署后可由 `.tsl` 调用取得结果;不要理解为 `.tsf` 会独立顺序执行。
- 需要扩展写法时,先进入对应专题页读取规则
- 扩展写法必须有对应专题事实支持
### `.tsl` 文件模型
@@ -9,7 +9,7 @@
## 本篇职责
回答“基本类型怎么写、数组和字符串怎么索引、字符串编码边界怎么写、哪些值规则属于语言级事实”。矩阵、集合扩展和复杂容器不在本页展开;命中这些任务时跳到 [12_matrix_and_collections.md](12_matrix_and_collections.md) 或对应深水专题。
回答“基本类型怎么写、数组和字符串怎么索引、字符串编码边界怎么写、哪些值规则属于语言级事实”。矩阵、集合扩展和复杂容器不在本页展开;相关事实见 [12_matrix_and_collections.md](12_matrix_and_collections.md) 或对应深水专题。
## 智能体值写法判断流程
@@ -18,7 +18,7 @@
3. 看到 `array(...)` 时,先判断要顺序数组还是字符串键表:顺序数组用位置元素,字符串键表用 `"Key": value`
4. 写下标前先判断对象类别:顺序数组和二进制缓冲区下标从 `0` 开始,字符串下标从 `1` 开始。
5. 写字符串区间前先确认 `s[start:end]``end` 会被包含;不要按半开区间推断。
6. 如果任务已经变成矩阵、集合扩展、结果集过滤 TS-SQL 数据形态,不要留在值页硬拼写法;先跳到 [12_matrix_and_collections.md](12_matrix_and_collections.md)、[13_resultset_and_filters.md](13_resultset_and_filters.md) [14_ts_sql.md](14_ts_sql.md)。
6. 矩阵、集合扩展、结果集过滤 TS-SQL 数据形态的事实分别见 [12_matrix_and_collections.md](12_matrix_and_collections.md)、[13_resultset_and_filters.md](13_resultset_and_filters.md) [14_ts_sql.md](14_ts_sql.md);本页不硬拼这些写法
7. 没有对应代码块时不要发明值写法;尤其不要从 JSON、JavaScript、Pascal 或 C 字符串规则直接迁移。
## 核心规则
@@ -17,7 +17,7 @@
2. 只有用户要求显式声明或遇到 `{$explicit+}` 时才优先写 `var`
3. 常量声明必须同时初始化;默认只生成 `const name = value;`,顶层脚本常量需要后续脚本语句时,仍按 `.tsl` 语句区规则组织。
4. 多参数赋值按 `[a, b] := array(...)` 写;单变量拆包必须写成 `[name, ] := array(...)`
5. 如果问题已经变成表达式求值、函数参数、运行时类型 / 转换、或 `{$explicit+}` 之外的编译选项,不要留在变量页硬推断;分别跳到 [06_expressions_and_operators.md](06_expressions_and_operators.md)、[05_functions_and_calls.md](05_functions_and_calls.md)、[17_types_and_conversions.md](17_types_and_conversions.md) [16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md)。
5. 表达式求值、函数参数、运行时类型 / 转换 `{$explicit+}` 之外的编译选项事实分别见 [06_expressions_and_operators.md](06_expressions_and_operators.md)、[05_functions_and_calls.md](05_functions_and_calls.md)、[17_types_and_conversions.md](17_types_and_conversions.md) [16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md);本页不硬推断这些规则
6. 没有对应代码块时不要发明变量/常量写法;尤其不要从 Pascal 的声明习惯反推 TSL 必须先声明变量。
## 核心规则
@@ -13,15 +13,15 @@
## 智能体函数/调用判断流程
1. 先判断目标文件是 `.tsl` 还是 `.tsf`;文件形态不明确时回 [02_core_model.md](02_core_model.md)。
1. 先判断目标文件是 `.tsl` 还是 `.tsf`;文件模型事实见 [02_core_model.md](02_core_model.md)。
2. `.tsl` 中先写语句区,再把 `function` / `procedure` 声明放在后面;不要在声明区后面追加脚本语句。
3. `.tsf` 中把顶层 `function` / `procedure` 当成模块 / 函数扩展声明;不要写成顺序执行入口。
4. 用户只说“写一个函数”且没有指定 `procedure` 时,默认用 `function`
5. 只有用户明确要求 `procedure` / 过程时,才用 `procedure`;即使任务没有返回值,也默认用 `function`
6. 调用普通 TSL 函数时,命名参数只写 `name: value`;不要把 `name = value` 当成命名参数。
7. 参数是否写回调用方要看 `const` / `var` / `{$varByRef-}` / `in` / `out`,不要默认按其他语言习惯推断。
8. 默认参数先按普通函数规则处理;涉及 `unit interface``unit const` 默认值时,跳到 [09_units_and_scope.md](09_units_and_scope.md)。
9. 匿名函数和 TSL 函数值只按本页明确的 `call(f, ...)` / `##f(...)` 生成;`external`、原生函数指针包装、C 回调、线程和系统交互跳到 [18_external_calls_and_threads.md](18_external_calls_and_threads.md)。
8. 默认参数先按普通函数规则处理;`unit interface``unit const` 默认值的事实见 [09_units_and_scope.md](09_units_and_scope.md)。
9. 匿名函数和 TSL 函数值只按本页明确的 `call(f, ...)` / `##f(...)` 生成;`external`、原生函数指针包装、C 回调、线程和系统交互的事实见 [18_external_calls_and_threads.md](18_external_calls_and_threads.md)。
10. 没有对应代码块时不要发明函数/调用写法;尤其不要把二进制函数、系统函数、TSL 函数值、原生函数指针和匿名函数都套成同一种调用语法。
## 核心规则
@@ -62,7 +62,7 @@
- 匿名函数和 TSL 函数值的稳定调用方式仍是 `call(f, ...)``##f(...)`
- `f(...)` 这种“函数变量直接调用”写法不作为可写事实;无论 `f` 是匿名函数、`findFunction(...)` 还是 `thisFunction(...)` 返回的函数指针,都不要默认写成直调。
- `::FuncName(...)` 可以指向全局/系统函数,用来绕过当前作用域里的同名局部函数。
- `external`、原生函数指针包装、`makeInstance` / C 回调和线程调用统一移到 [18_external_calls_and_threads.md](18_external_calls_and_threads.md)。
- `external`、原生函数指针包装、`makeInstance` / C 回调和线程调用的事实见 [18_external_calls_and_threads.md](18_external_calls_and_threads.md)。
- 不要在 `.tsl` 的函数声明区之后继续追加脚本语句。
## 可直接照写示例
@@ -72,7 +72,7 @@
- 普通运行示例默认按 `.tsl` 脚本语句区书写;入口语句放前面,函数 / 过程 / 类型声明放在后置声明区。
- `.tsf` 函数 / 过程示例只按可复用顶层声明理解,不要在 `.tsf` 里追加顺序执行入口语句。
- `procedure` 示例只在用户明确要求 `procedure` / 过程时复制;普通“写函数”任务不要用。
- `external`、原生函数指针包装、C 回调、线程、系统交互和二进制函数边界不在本页硬推断;命中这些任务时跳到 [18_external_calls_and_threads.md](18_external_calls_and_threads.md) 或函数库文档。
- `external`、原生函数指针包装、C 回调、线程、系统交互和二进制函数边界不在本页硬推断;相关事实见 [18_external_calls_and_threads.md](18_external_calls_and_threads.md) 或函数库文档。
### 基础函数 / 过程骨架
@@ -515,7 +515,7 @@ function F(a, b = 100, c = default_value);
- `F(1)` 输出 `101``F(1, 2)` 输出 `3`
- 同一组文件下,`UnitConst.default_value` 可读到 `888`,而 `F(1, 2, 3)` 输出 `6`
- 因此不要把“普通函数默认参数可用”直接泛化成“`unit interface` 里引用 `unit const` 的默认参数也同样可靠”
- 这类跨 `unit` 的声明边界,统一回看 [09_units_and_scope.md](09_units_and_scope.md)
- 这类跨 `unit` 的声明边界事实见 [09_units_and_scope.md](09_units_and_scope.md)
### 可变参数 `...`
@@ -14,9 +14,9 @@
## 智能体表达式/运算符判断流程
1. 先判断要写基础表达式运算符,还是集合、矩阵、对象重载、运行时调用或 TS-SQL 这类专题运算符。
2. 普通变量赋值只能用 `:=`,不要把 `=` 当赋值写法;`const name = value;` 是常量初始化规则,回看 [04_variables_and_constants.md](04_variables_and_constants.md)。
2. 普通变量赋值只能用 `:=`,不要把 `=` 当赋值写法;`const name = value;` 是常量初始化规则,相关事实见 [04_variables_and_constants.md](04_variables_and_constants.md)。
3. 在普通表达式里,比较才用 `=`,并且把比较表达式放在 `writeLn(...)`、条件或其他需要布尔值的位置。
4. 函数签名里的默认参数 `name = value` 不是比较表达式;默认参数规则 [05_functions_and_calls.md](05_functions_and_calls.md)。
4. 函数签名里的默认参数 `name = value` 不是比较表达式;默认参数规则 [05_functions_and_calls.md](05_functions_and_calls.md)。
5. 普通算术优先使用 `+``-``*``/``%`;左除用 `\`;整数除法和取模可用 `div``mod`;幂运算用 `^`;对数用 `~`;一元倒数用 `!x`
6. 逻辑表达式优先使用 `and``or``not``&&``||``.&&``.||``.!!` 也已可用,但默认不作为主写法;不要把 `!` 写成逻辑非。
7. 位运算使用点前缀或移位关键字:`.&``.|``.!``.^``shl``shr``rol``ror`;普通 `&``|``~` 不按位运算理解。
@@ -25,9 +25,9 @@
10. 需要延迟求值或动态表达式对象时,才使用 `@expr``&"..."`,并用本页明确的 `eval(...)` 形态求值。
11. 空安全访问只照本页文档明确形态写:`a?.member``a?.[index]`、以及 `c?.a?.[1]`。不要外推成任意深度、任意组合都可写。
12. 需要连续比较时,标量用 `:<` / `:>` 这组链式比较;数组逐元素比较用 `::<` / `::>` 这组矩阵链式比较。
13. 命中集合、矩阵、过滤、对象重载、函数值调用、网格调用、运行时后缀 TS-SQL 时,按“专题运算符入口表”跳到对应页面
14. `{$ifdef ...}` 只作为能力探测;编译选项边界 [16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md)。
15. 任务需要的运算符没有文档事实时,不要生成猜测写法;只能切到对应专题、项目自身文档或项目专属规则,仍无结论时记录文档缺口。
13. 集合、矩阵、过滤、对象重载、函数值调用、网格调用、运行时后缀 TS-SQL 的事实所有者由“专题运算符入口表”列出
14. `{$ifdef ...}` 只作为能力探测;编译选项边界 [16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md)。
15. 任务需要的运算符没有文档事实时,不要生成猜测写法;只能使用对应专题事实、项目自身文档或项目专属规则,仍无结论时记录文档缺口。
## 核心规则
@@ -44,13 +44,13 @@
| 函数默认参数 | `name = value` | 这是函数签名规则,不按比较表达式处理。 |
| 算术复合赋值 | `+=``-=``*=``/=``\=``%=``^=``~=``div=` | 已有变量需要原地更新时使用;`div=` 是整除复合赋值。 |
| 点前缀复合赋值 | `.&=``.&#124;=``.^=``.&&=``.&#124;&#124;=` | 位运算或点前缀逻辑需要原地更新时使用。 |
| 自增 / 自减 | `a++``a--``++a``--a` | 普通数字变量可直接用;对象重载语义 [24_object_overloads_and_iteration.md](24_object_overloads_and_iteration.md)。 |
| 自增 / 自减 | `a++``a--``++a``--a` | 普通数字变量可直接用;对象重载语义 [24_object_overloads_and_iteration.md](24_object_overloads_and_iteration.md)。 |
| 算术 | `+``-``*``/``\``%``div``mod``^``~` | 普通数值计算使用;`\` 是左除,`^` 是幂运算,`~` 是对数运算。 |
| 一元正负号 | `+x``-x` | 可直接用于数值表达式。 |
| 一元倒数 | `!x` | 整型、实型输入返回实型倒数;矩阵逆/广义逆 [22_matrix_deep_dive.md](22_matrix_deep_dive.md)。 |
| 一元倒数 | `!x` | 整型、实型输入返回实型倒数;矩阵逆/广义逆 [22_matrix_deep_dive.md](22_matrix_deep_dive.md)。 |
| 字符串连接 | `+``$` | 字符串拼接两种写法都已写入文档;默认优先用 `+`。 |
| 比较 | `=``<>``<``>``<=``>=` | `=` 只作比较,不作普通赋值。 |
| 点前缀比较 | `.=``.<>``.<``.>``.<=``.>=` | 标量比较可用;数组/矩阵样数据上的逐元素语义 [12_matrix_and_collections.md](12_matrix_and_collections.md)。 |
| 点前缀比较 | `.=``.<>``.<``.>``.<=``.>=` | 标量比较可用;数组/矩阵样数据上的逐元素语义 [12_matrix_and_collections.md](12_matrix_and_collections.md)。 |
| 逻辑 | `and``or``not``&&``&#124;&#124;``.&&``.&#124;&#124;``.!!` | 默认优先写 `and` / `or` / `not`;不要用 `!` 表示逻辑非。 |
| 位运算 | `.&``.&#124;``.!``.^``shl``shr``rol``ror` | 生成代码时写成点前缀或关键字形态;普通 `&``&#124;``~` 不作为位运算写法。 |
| 成员 / 下标 / 调用 | `obj.member``value[index]``Func(args)` | 普通访问和调用可直接使用;类、对象、函数细节回对应专题。 |
@@ -60,10 +60,10 @@
| Pascal 风格条件表达式 | `if condition then true_value else false_value` | 必须带 `else`。 |
| 表达式对象 | `@expr``&"..."` | 需要延迟求值或动态表达式对象时使用,并用 `eval(...)` 求值。 |
| 逗号表达式 | `(exp1, exp2, ..., expN)` | 从左到右求值,返回最后一个表达式结果。 |
| 集合 / 匹配 / 类型关系 | `in``sqlin``like``is` | 否定形态见下一行;集合运算 [12_matrix_and_collections.md](12_matrix_and_collections.md)。 |
| 集合 / 匹配 / 类型关系 | `in``sqlin``like``is` | 否定形态见下一行;集合运算 [12_matrix_and_collections.md](12_matrix_and_collections.md)。 |
| 否定关系 | `not in``not sqlin``not like``not is` | 直接使用这几种文档明确形态,不自行重组。 |
| 标量链式比较 | `:<``:>``:<>``:==``:>=``:<=` | 连续标量比较才使用。 |
| 矩阵链式比较 | `::<``::>``::<>``::==``::>=``::<=` | 数组逐元素链式比较才使用;数组与矩阵样数据细节 [12_matrix_and_collections.md](12_matrix_and_collections.md)。 |
| 矩阵链式比较 | `::<``::>``::<>``::==``::>=``::<=` | 数组逐元素链式比较才使用;数组与矩阵样数据细节 [12_matrix_and_collections.md](12_matrix_and_collections.md)。 |
### 专题运算符入口
@@ -100,9 +100,9 @@
按需生成规则:
- 已有变量需要原地更新时,才用 `+=``-=``*=``/=``\=``%=``^=``~=``div=``.&=``.|=``.^=``.&&=``.||=``a++;``a--;``++a;``--a;`
- 需要矩阵逆/广义逆时才使用 `!A`并回 [22_matrix_deep_dive.md](22_matrix_deep_dive.md) 确认矩阵生成规则
- 需要矩阵逆/广义逆时才使用 `!A`矩阵生成规则以 [22_matrix_deep_dive.md](22_matrix_deep_dive.md) 为准
- 位运算需要明确写成点前缀或关键字形态:`.&``.|``.!``.^``shl``shr``rol``ror`;普通 `&` 不作为位与写法使用。
- 点前缀比较 `.=``.<>``.<``.>``.<=``.>=` 命中数组/矩阵样数据时,先回 [12_matrix_and_collections.md](12_matrix_and_collections.md) 判断逐元素语义
- 点前缀比较 `.=``.<>``.<``.>``.<=``.>=` 命中数组/矩阵样数据时,逐元素语义以 [12_matrix_and_collections.md](12_matrix_and_collections.md) 为准
- 需要延迟求值或动态表达式对象时,才用 `@expr``&"..."`,并用 `eval(...)` 求值。
- 需要在一个表达式内按顺序执行多个子表达式时,才用逗号表达式 `(exp1, exp2, ..., expN)`
- 空安全访问只按 `a?.member``a?.[index]` 和本页示例里的 `c?.a?.[1]` 生成,不外推任意深链。
@@ -121,11 +121,11 @@
使用这些示例时遵守:
- `:=` 是普通变量赋值写法;常量初始化规则 [04_variables_and_constants.md](04_variables_and_constants.md)。
- 函数调用、命名参数、默认参数和函数值调用边界 [05_functions_and_calls.md](05_functions_and_calls.md);不要把函数签名里的 `name = value` 当成比较表达式。
- 分支/循环语句 [07_control_flow.md](07_control_flow.md);对象成员和类相关表达式 [08_objects_and_classes.md](08_objects_and_classes.md)。
- 字符串字面量、拼接与文本边界 [03_values_and_literals.md](03_values_and_literals.md);数组扩展和矩阵样数据 [12_matrix_and_collections.md](12_matrix_and_collections.md)。
- `{$ifdef ...}` 能力探测 [16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md),不要写成普通业务逻辑。
- `:=` 是普通变量赋值写法;常量初始化规则 [04_variables_and_constants.md](04_variables_and_constants.md)。
- 函数调用、命名参数、默认参数和函数值调用边界 [05_functions_and_calls.md](05_functions_and_calls.md);不要把函数签名里的 `name = value` 当成比较表达式。
- 分支/循环语句 [07_control_flow.md](07_control_flow.md);对象成员和类相关表达式 [08_objects_and_classes.md](08_objects_and_classes.md)。
- 字符串字面量、拼接与文本边界 [03_values_and_literals.md](03_values_and_literals.md);数组扩展和矩阵样数据 [12_matrix_and_collections.md](12_matrix_and_collections.md)。
- `{$ifdef ...}` 能力探测 [16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md),不要写成普通业务逻辑。
### 基础赋值和条件求值
@@ -41,9 +41,9 @@
使用这些示例时遵守:
- 条件表达式、比较、布尔值和普通赋值 [06_expressions_and_operators.md](06_expressions_and_operators.md)。
- 函数里的控制流只按控制流语法处理;函数文件模型、返回值和参数规则 [05_functions_and_calls.md](05_functions_and_calls.md)。
- `goto``debugReturn`、计时和性能分析器不在本页生成,统一回 [15_debug_and_profiler.md](15_debug_and_profiler.md)。
- 条件表达式、比较、布尔值和普通赋值的事实见 [06_expressions_and_operators.md](06_expressions_and_operators.md)。
- 函数里的控制流只按控制流语法处理;函数文件模型、返回值和参数规则 [05_functions_and_calls.md](05_functions_and_calls.md)。
- `goto``debugReturn`、计时和性能分析器不在本页生成,相关事实见 [15_debug_and_profiler.md](15_debug_and_profiler.md)。
### `if``while``repeat ... until`
@@ -22,7 +22,7 @@
5. 构造函数默认保持 `public create`,不要把 `private` / `protected create` 当成会自动执行的构造函数。
6. 普通类成员默认显式写 `public` 段,不依赖隐式 public。
7. 方法体内访问当前实例成员默认直接写成员名;成员读写为了性能不加 `self` 前缀。
8. 命中对象反射 / 运行时状态、内置运行时对象、对象重载 / 迭代时,分别跳到 [20_object_runtime_and_introspection.md](20_object_runtime_and_introspection.md)、[21_builtin_runtime_objects.md](21_builtin_runtime_objects.md)、[24_object_overloads_and_iteration.md](24_object_overloads_and_iteration.md)。
8. 对象反射 / 运行时状态、内置运行时对象、对象重载 / 迭代的事实分别见 [20_object_runtime_and_introspection.md](20_object_runtime_and_introspection.md)、[21_builtin_runtime_objects.md](21_builtin_runtime_objects.md)、[24_object_overloads_and_iteration.md](24_object_overloads_and_iteration.md)。
9. 没有文档事实时不要发明对象/类写法。
## 核心规则
@@ -59,7 +59,7 @@
- 如果类里定义了 `function create(...)``new``createObject("ClassName", ...)``createObject(ClassType, ...)` 都可以透传构造参数,也都支持默认参数和命名参数。
- 析构写法是无参 `function destroy();`;把对象引用设为 `nil` 时会触发它。
- 工厂式 `self(0)` / `self(1)` 可用;不要生成 `self()` 这种无参工厂式写法。
- 跨 `unit` 类路径创建和继承属于多文件边界;先回看 [09_units_and_scope.md](09_units_and_scope.md) 和 [19_namespace_libpath_and_unit_runtime.md](19_namespace_libpath_and_unit_runtime.md),不要从普通单文件 `new` / `createObject` 规则直接泛化。
- 跨 `unit` 类路径创建和继承属于多文件边界;相关事实见 [09_units_and_scope.md](09_units_and_scope.md) 和 [19_namespace_libpath_and_unit_runtime.md](19_namespace_libpath_and_unit_runtime.md),不要从普通单文件 `new` / `createObject` 规则直接泛化。
- `{$ifdef parentClassInUnit}` 为真,可用于探测“继承和构造单元中的类”能力是否可用。
- `private` / `protected` / `public` 可用;类开头未写可见性时,成员默认按 `public` 处理,但生成代码默认显式写 `public`
- 同一个可见性段里后续没有切换关键字的成员,会沿用前一个可见性。
@@ -1343,7 +1343,7 @@ writeLn(obj.value);
输出说明:
- 这个骨架只说明字符串路径创建需要按跨 `unit` 边界处理。
- 生成实际代码前先回看 [09_units_and_scope.md](09_units_and_scope.md) 和 [19_namespace_libpath_and_unit_runtime.md](19_namespace_libpath_and_unit_runtime.md)。
- 生成实际代码所需的多文件事实见 [09_units_and_scope.md](09_units_and_scope.md) 和 [19_namespace_libpath_and_unit_runtime.md](19_namespace_libpath_and_unit_runtime.md)。
- 不要把它直接改写成普通本地类的 `new ClassName()` 模式。
继承单元中的嵌套类路径属于跨 `unit` 边界,这里也用 `text` 展示骨架:
@@ -23,7 +23,7 @@
2. `unit` 文件只描述可复用单元;脚本入口仍放在 `.tsl`
3. `uses` 必须放在普通语句之前;普通语句后不要再追加顶层 `uses`
4. 默认参数、接口段、实现段和作用域边界只照本页文档明确形态写。
5. 命中 `unit` 生命周期、命名空间、查找路径、`tsl.conf` 命令行查找路径参数时,跳到 [19_namespace_libpath_and_unit_runtime.md](19_namespace_libpath_and_unit_runtime.md)。
5. `unit` 生命周期、命名空间、查找路径、`tsl.conf` 命令行查找路径参数的事实见 [19_namespace_libpath_and_unit_runtime.md](19_namespace_libpath_and_unit_runtime.md)。
6. 没有对应代码块时不要发明 unit/作用域写法。
## 核心规则
@@ -18,8 +18,8 @@
3. `#Func() with array(...)` 只作为运行时环境调用写法,不要套到普通本地函数。
4. 网格调用返回的不是最终值;需要最终结果时继续写 `dupvalue(...)`
5. 全局缓存读写要成对出现,并明确键和值的生命周期。
6. 普通函数调用回到 [05_functions_and_calls.md](05_functions_and_calls.md),不要把运行时服务写成普通语法糖;缓存值参与 `select` 时,查询语法仍回到 [14_ts_sql.md](14_ts_sql.md)。
7. 如果问题是内置运行时对象本身,转到 [21_builtin_runtime_objects.md](21_builtin_runtime_objects.md)。
6. 普通函数调用的事实见 [05_functions_and_calls.md](05_functions_and_calls.md),不要把运行时服务写成普通语法糖;缓存值参与 `select` 时,查询语法事实见 [14_ts_sql.md](14_ts_sql.md)。
7. 内置运行时对象本身的事实见 [21_builtin_runtime_objects.md](21_builtin_runtime_objects.md)。
8. 本地函数后缀 `with` 属于反例时不要照写。
9. 没有对应代码块时不要发明运行时上下文/运行时服务/全局缓存写法。
@@ -14,14 +14,14 @@
## 智能体常见误写判断流程
1. 先识别用户写法属于值、变量、函数、表达式、对象、`unit`、TS-SQL 还是外部调用误区。
2. 遇到本页反例时,不要修成相邻语言习惯,必须跳回对应语法页可直接照写示例。
2. 遇到本页反例时,不要修成相邻语言习惯,必须对应语法页可直接照写示例为准
3. 反例只用于排错和避免误写,不作为可照写模板。
4. 修复时保留 `.tsl` / `.tsf` 文件模型判断,不要只改局部语句。
5. 没有对应条目时不要发明替代语法。
## 这页怎么用
- 先按主题扫一遍,再回到对应正文正确写法。
- 先按主题识别反例,再以对应正文正确写法为准
- 这里不重复讲完整规则,只保留“错法 -> 正确页”的索引。
- 只有已经有明确反例边界的误写,才会列在这里。
- 细节型边界放回对应专题页;本页只保留最容易诱导智能体写错的高频误写。
@@ -197,5 +197,5 @@ end;
- 不要把本页任何 `反例 / 不可照写` 代码块改写成默认正向模板。
- 不要只凭 Pascal、JavaScript、Python 或 SQL 直觉修正 TSL 写法。
- 不要在本页发明替代语法;每个反例都要回到条目末尾标出的正确专题页。
- 不要在本页发明替代语法;每个反例都条目末尾标出的正确专题页为准
- 不要把反例边界写成可用语法。
@@ -14,10 +14,10 @@
## 智能体数组/矩阵样数据判断流程
1. 先判断需要顺序数组、字符串键表、嵌套数组、矩阵样比较,还是去重型集合关系。
2. 普通容器优先从 `array(...)` 起手;下标和键访问回看值语法
2. 普通容器优先从 `array(...)` 起手;下标和键访问值语法事实为准
3. 矩阵链式比较只照 `::` 系列文档明确示例写,不要混用标量链式比较。
4. 基础成员判断用 `in` / `not in`;整行存在判断用 `sqlin` / `not sqlin`;去重型行集合并、交、差、对称差用 `union2` / `intersect` / `minus` / `outersect`
5. 结果集过滤 TS-SQL 查询需求分别跳转到 [13_resultset_and_filters.md](13_resultset_and_filters.md) [14_ts_sql.md](14_ts_sql.md)。
5. 结果集过滤 TS-SQL 查询的事实分别见 [13_resultset_and_filters.md](13_resultset_and_filters.md) [14_ts_sql.md](14_ts_sql.md)。
6. 没有对应代码块时不要发明数组/矩阵样数据/集合关系写法。
## 核心规则
@@ -337,11 +337,11 @@ writeLn("(1,1):", result[1][1]);
- TS-SQL 查询与写回
- 更大范围的矩阵函数族
这些内容分别进入 [13_resultset_and_filters.md](13_resultset_and_filters.md)、[14_ts_sql.md](14_ts_sql.md)、[22_matrix_deep_dive.md](22_matrix_deep_dive.md) [23_fmarray.md](23_fmarray.md),不再外跳到原目录
这些内容的事实分别见 [13_resultset_and_filters.md](13_resultset_and_filters.md)、[14_ts_sql.md](14_ts_sql.md)、[22_matrix_deep_dive.md](22_matrix_deep_dive.md) [23_fmarray.md](23_fmarray.md)。
## 禁止项
- 不要把字符串下标按数组的 `0` 起始规则来写;字符串索引回看 [03_values_and_literals.md](03_values_and_literals.md)。
- 不要把字符串下标按数组的 `0` 起始规则来写;字符串索引事实见 [03_values_and_literals.md](03_values_and_literals.md)。
- 不要把矩阵链式比较 `::...` 和标量链式比较混写成同一种语法。
- 不要把 `in``sqlin` 当成同一个概念。
- 不要期待 `union2` 保留重复行。
@@ -351,6 +351,6 @@ writeLn("(1,1):", result[1][1]);
- 左侧数组要表达”这一整行是否存在于右侧结果集”时,用 `sqlin`
- `minus` 表达集合差集;如果任务要求保留左侧原始重复次数,改走 [13_resultset_and_filters.md](13_resultset_and_filters.md) 的过滤规则。
- 不要在本页发明结果集过滤、TS-SQL 查询、写回语法或更大矩阵函数族。
- 不要把普通 `array(...)` 自动升级成 `FMArray`只有任务明确命中时才进入 [23_fmarray.md](23_fmarray.md)。
- 不要把普通 `array(...)` 自动升级成 `FMArray``FMArray` 专属事实见 [23_fmarray.md](23_fmarray.md)。
- 不要把点前缀比较 `.>` 和矩阵链式比较 `::>` 混用;`.>` 返回逻辑数组,`::>` 是链式比较。
- 不要以为非完全矩阵缺位会报错;默认当 `0` 处理。
@@ -15,9 +15,9 @@
1. 先判断任务是 `filterIn(...)` / `filterNotIn(...)` 过滤、结果集字段访问、去重型集合运算,还是 TS-SQL 查询。
2. 字段访问优先照本页明确的字符串键或结果集字段形态写。
3. 复杂查询需求优先跳转到 [14_ts_sql.md](14_ts_sql.md),不要把查询语法硬塞进过滤函数。
4. `in` / `sqlin` / `union2` / `intersect` / `minus` / `outersect` 这类去重型集合关系跳转到 [12_matrix_and_collections.md](12_matrix_and_collections.md)。
5. 金融数据筛选要先确认数据来源;函数事实使用 `tsl-api-reference` skill 查询,项目字段和业务上下文项目实际接口。
3. 复杂查询的语法事实见 [14_ts_sql.md](14_ts_sql.md),不要把查询语法硬塞进过滤函数。
4. `in` / `sqlin` / `union2` / `intersect` / `minus` / `outersect` 这类去重型集合关系的事实见 [12_matrix_and_collections.md](12_matrix_and_collections.md)。
5. 金融数据筛选要先确认数据来源;函数事实使用 `tsl-api-reference` skill 查询,项目字段和业务上下文项目实际接口为准
6. 没有对应代码块时不要发明结果集/过滤写法。
## 核心规则
@@ -19,7 +19,7 @@
4. 在一维数组上做 TS-SQL 时,优先使用 `thisRow``thisRowIndex`
5. 联接选 `join` / `left join` / `right join` / `full join` / `cross join` / 逗号联接;等值联接可用 `with(... on ...)` 优化。
6. 聚集统一形态 `(Expr, Cond, N, MovingFirst, CacheId)`:条件聚集传 `Cond`,移动聚集传 `N`;分组后筛选用 `having`;自定义聚集用 `aggof`
7. 只想按已有结果集保留/排除行时跳到 [13_resultset_and_filters.md](13_resultset_and_filters.md);要做去重型集合关系时跳到 [12_matrix_and_collections.md](12_matrix_and_collections.md);要在 `FMArray` 上做查询或写回边界时跳到 [23_fmarray.md](23_fmarray.md)。
7. 按已有结果集保留/排除行、去重型集合关系、`FMArray` 查询或写回边界的事实分别见 [13_resultset_and_filters.md](13_resultset_and_filters.md)、[12_matrix_and_collections.md](12_matrix_and_collections.md)、[23_fmarray.md](23_fmarray.md)。
8. 没有对应代码块时不要发明 TS-SQL 写法。
## 核心规则
@@ -14,7 +14,7 @@
## 智能体调试/性能分析器判断流程
1. 先判断任务需要跳转、提前返回、运行环境调试、计时还是性能分析器。
2. 普通控制流优先回到 [07_control_flow.md](07_control_flow.md),本页只处理调试补充工具。
2. 普通控制流的事实见 [07_control_flow.md](07_control_flow.md),本页只处理调试补充工具。
3. `debugReturn` 会结束整段脚本,不能当成普通函数返回。
4. 计时和性能分析器只照文档最小调用写,不要补未写入文档参数。
5. 没有对应代码块时不要发明调试/性能分析器写法。
@@ -16,7 +16,7 @@
1. 先判断要写注释、标识符、条件编译,还是编译选项。
2. 注释、大小写、条件编译指令只照本页文档明确形态写。
3. `{$explicit+}` 会改变变量声明要求,生成代码前先判断是否需要 `var`
4. `{$varByRef+}` / `{$varByRef-}` 会影响未修饰形参传递语义,细节回看函数页。
4. `{$varByRef+}` / `{$varByRef-}` 会影响未修饰形参传递语义,细节函数页事实为准
5. 没有对应代码块时不要发明词法/编译选项写法。
## 核心规则
@@ -39,17 +39,17 @@ TSL 关键字大小写无关;本表统一按文档推荐写法展示。生成
| 分类 | 关键字 / 保留名 | 生成规则 |
| --- | --- | --- |
| 程序与函数结构 | `program``function``procedure``begin``end``return``exit` | 默认写函数时使用 `function``procedure` 只在用户明确要求时使用。 |
| 控制流 | `if``then``else``case``of``for``to``downto``step``while``do``repeat``until``break``continue``goto``label` | 具体语句形态 [07_control_flow.md](07_control_flow.md)。 |
| 异常控制 | `try``except``finally``raise``exceptObject` | 异常语法 [07_control_flow.md](07_control_flow.md)。 |
| 值与容器 | `nil``true``false``nan``inf``array` | 字面量与数组基础 [03_values_and_literals.md](03_values_and_literals.md) 和 [12_matrix_and_collections.md](12_matrix_and_collections.md)。 |
| 运算关键字 | `and``or``not``in``sqlin``like``is``div``mod``shl``shr``rol``ror` | 运算符规则 [06_expressions_and_operators.md](06_expressions_and_operators.md)。 |
| 控制流 | `if``then``else``case``of``for``to``downto``step``while``do``repeat``until``break``continue``goto``label` | 具体语句形态 [07_control_flow.md](07_control_flow.md)。 |
| 异常控制 | `try``except``finally``raise``exceptObject` | 异常语法 [07_control_flow.md](07_control_flow.md)。 |
| 值与容器 | `nil``true``false``nan``inf``array` | 字面量与数组基础 [03_values_and_literals.md](03_values_and_literals.md) 和 [12_matrix_and_collections.md](12_matrix_and_collections.md)。 |
| 运算关键字 | `and``or``not``in``sqlin``like``is``div``mod``shl``shr``rol``ror` | 运算符规则 [06_expressions_and_operators.md](06_expressions_and_operators.md)。 |
| 参数访问 | `params``paramCount``realParamCount``var``out``const` | 普通参数优先写具名形参;`params` / `paramCount` / `realParamCount` 只用于变参或参数个数判断。 |
| 运行时上下文 | `sysParams``system``debugReturn``debugRunEnv``debugRunEnvDo``echo``global``static``thisFunction``_myMem_``_maxMem_``__line__``__stack_frame` | 运行时系统参数 [10_runtime_context_and_with.md](10_runtime_context_and_with.md);调试相关 [15_debug_and_profiler.md](15_debug_and_profiler.md)。 |
| 运行时上下文 | `sysParams``system``debugReturn``debugRunEnv``debugRunEnvDo``echo``global``static``thisFunction``_myMem_``_maxMem_``__line__``__stack_frame` | 运行时系统参数 [10_runtime_context_and_with.md](10_runtime_context_and_with.md);调试相关事实见 [15_debug_and_profiler.md](15_debug_and_profiler.md)。 |
| LIKE 精度 | `likeEps``likeEpsRate` | 只在需要调整 `like` 数值近似判断阈值时使用。 |
| 类与对象 | `type``class``new``findClass``findFunction``fackClass``property``self``virtual``override``overload``protected``public``private``published``static` | 类声明、对象创建和成员规则 [08_objects_and_classes.md](08_objects_and_classes.md)。 |
| 外部调用约定 | `external``cdecl``pascal``stdcall``safecall``fastcall``register` | 外部调用细节 [18_external_calls_and_threads.md](18_external_calls_and_threads.md)。 |
| 类与对象 | `type``class``new``findClass``findFunction``fackClass``property``self``virtual``override``overload``protected``public``private``published``static` | 类声明、对象创建和成员规则 [08_objects_and_classes.md](08_objects_and_classes.md)。 |
| 外部调用约定 | `external``cdecl``pascal``stdcall``safecall``fastcall``register` | 外部调用细节 [18_external_calls_and_threads.md](18_external_calls_and_threads.md)。 |
| 客户端远程调用与权限 | `rdo``rdo2``sudo``setUid` | 平台/客户端远程调用和权限语义不作为普通本地语法模板。 |
| TS-SQL 查询 | `select``vselect``sselect``mselect``distinct``selectOpt``dRange``as``from``marketTable``infoTable``tradeTable``sqlTable``hugeSqlTable``keepNull``dateKey``of``order``by``where``desc``asc``group``having` | 查询语法 [14_ts_sql.md](14_ts_sql.md)。 |
| TS-SQL 查询 | `select``vselect``sselect``mselect``distinct``selectOpt``dRange``as``from``marketTable``infoTable``tradeTable``sqlTable``hugeSqlTable``keepNull``dateKey``of``order``by``where``desc``asc``group``having` | 查询语法 [14_ts_sql.md](14_ts_sql.md)。 |
| TS-SQL 聚合与上下文 | `checksumOf``countOf``sumOf``maxOf``stdevOf``varOf``totalVarOf``normOf``medianOf``aveDevOf``geoMeanOf``skewOf``kurtosisOf``skew2Of``kurtosis2Of``largeOf``percentileOf``quartileOf``trimMeanOf``avgOf``minOf``aggOf``stdevpOf``varpOf``modeOf``devSqOf``harMeanOf``checksum_aggOf``smallOf``percentRankOf``rankOf``frequencyOf``productOf``refOf``refsOf``aggValue``thisGroup``thisRow``thisRowIndex``thisOrder` | 这些名称只在 TS-SQL 语境中生成。 |
| TS-SQL 写入 | `insert``insertFields``values``update``set``delete``deleteOpt``fetchFirst``fetchNext` | 写回/变更型查询只按 TS-SQL 专题页生成。 |
| 系统保留未使用 | `exports``dispInterface``library``asm``record``resourceString``threadVar``constructor``destructor``inline``packed``abstract``inherited` | 这些名称被系统保留,不作为普通标识符使用,也不作为可写语法模板。 |
@@ -9,15 +9,15 @@
## 本篇职责
回答“当问题不再是怎么声明变量或书写普通字面量,而是运行时值会变成什么类型、默认值是什么、怎样显式转换、复数怎样表示时,应该看哪里”。`var` / `const` 声明选择回看 [04_variables_and_constants.md](04_variables_and_constants.md),编译期开关回看 [16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md)。
回答“当问题不再是怎么声明变量或书写普通字面量,而是运行时值会变成什么类型、默认值是什么、怎样显式转换、复数怎样表示时,应该看哪里”。`var` / `const` 声明选择和编译期开关的事实分别见 [04_variables_and_constants.md](04_variables_and_constants.md)、[16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md)。
## 智能体类型/转换判断流程
1. 先判断要写数值字面量、日期时间、真假值、nil、复数,还是类型转换边界。
2. 整数、实数、日期时间、特殊实数和复数只照本页文档字面量写。
3. 不要把能编译的混合类型表达式误判为能按预期自动转换。
4. 遇到 `var` / `const` 声明选择跳转到 [04_variables_and_constants.md](04_variables_and_constants.md),遇到 `{$explicit+}` / `{$explicit-}` 等编译选项跳转到 [16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md)。
5. 遇到字符串字面量、编码文本边界跳转到 [03_values_and_literals.md](03_values_and_literals.md)。
4. `var` / `const` 声明选择 `{$explicit+}` / `{$explicit-}` 等编译选项的事实分别见 [04_variables_and_constants.md](04_variables_and_constants.md)、[16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md)。
5. 字符串字面量、编码文本边界的事实见 [03_values_and_literals.md](03_values_and_literals.md)。
6. 没有对应代码块时不要发明类型/转换写法。
## 核心规则
@@ -9,16 +9,16 @@
## 本篇职责
回答“类已经会声明、继承、构造之后,怎样检查类信息、函数信息、对象运行时状态、弱引用创建和弱引用访问判定”。如果只是写一个类、创建一个对象、调用对象方法,回到 [08_objects_and_classes.md](08_objects_and_classes.md)不要因为本页存在反射或弱引用能力就改写成动态查找。
回答“类已经会声明、继承、构造之后,怎样检查类信息、函数信息、对象运行时状态、弱引用创建和弱引用访问判定”。普通类编写、对象创建和对象方法调用的事实见 [08_objects_and_classes.md](08_objects_and_classes.md)不要因为本页存在反射或弱引用能力就改写成动态查找。
## 智能体对象运行时/反射判断流程
1. 先判断用户是否明确要求运行时类类型、方法句柄、对象状态、对象枚举、反射信息或弱引用/自动弱引用。
2. 普通对象创建、普通方法调用、类声明和继承都回到 [08_objects_and_classes.md](08_objects_and_classes.md),不要把 `findClass(...)` / `createObject(...)` 当默认写法。
2. 普通对象创建、普通方法调用、类声明和继承的事实见 [08_objects_and_classes.md](08_objects_and_classes.md),不要把 `findClass(...)` / `createObject(...)` 当默认写法。
3. 确实命中反射时,入口优先照 `findClass``findFunction``thisFunction``findOverLoad` 等文档明确示例写。
4. 访问弱引用前先做 `checkWeakRef(...)` 判定,不要假设失效弱引用安全返回 `nil`
5. 类内段落式 `weakRef` / `autoRef`(不带分号)是合法的成员弱引用开关;只有带分号的 `weakRef;` / `autoRef;` 才报 `invalid class definition`
6. 函数值调用边界回看函数页,避免把函数指针直接当普通函数调用。
6. 函数值调用边界函数页事实为准,避免把函数指针直接当普通函数调用。
7. 没有对应代码块时不要发明对象运行时/反射/弱引用写法。
## 核心规则
@@ -156,7 +156,7 @@ end;
- 输出 `1`
- 说明 `obj.classInfo(1)` 可以返回类类型
- 也说明这个类类型可以继续交给 `createObject(...)`
- 这个 `createObject(cls)` 只适用于“类类型来自运行时”的场景;普通本地类创建仍回 [08_objects_and_classes.md](08_objects_and_classes.md) 使用 `new ClassName()`
- 这个 `createObject(cls)` 只适用于“类类型来自运行时”的场景;普通本地类创建 [08_objects_and_classes.md](08_objects_and_classes.md) `new ClassName()` 规则为准
`classInfo()` 返回的映射字段:
@@ -548,8 +548,8 @@ end;
## 禁止项
- 不要在运行时/反射页发明类声明、继承或构造语法;类基础 [08_objects_and_classes.md](08_objects_and_classes.md)。
- 不要为了普通对象创建先写 `findClass(...)` / `createObject(...)`;普通本地类创建 [08_objects_and_classes.md](08_objects_and_classes.md),默认用 `new ClassName()`
- 不要在运行时/反射页发明类声明、继承或构造语法;类基础事实见 [08_objects_and_classes.md](08_objects_and_classes.md)。
- 不要为了普通对象创建先写 `findClass(...)` / `createObject(...)`;普通本地类创建 [08_objects_and_classes.md](08_objects_and_classes.md) 为准,默认用 `new ClassName()`
- 不要把函数句柄直接当普通函数直调;默认调用方式是 `f.do(...)`
- 不要把 `functionInfo` 示例外推成所有字段都可读。
- 不要把引用计数样例泛化成所有对象销毁时机;只按本页文档行为描述。
@@ -16,7 +16,7 @@
1. 先判断要访问哪个内置运行时对象,以及它是不是语言对象而非业务 API。
2. 只照本页明确的最小读写路径使用内置对象。
3. 不要把金融业务上下文对象和语言运行时对象混在一起。
4. 需要系统参数 `with` 后缀时跳转到运行时上下文页
4. 系统参数 `with` 后缀的事实见 [10_runtime_context_and_with.md](10_runtime_context_and_with.md)
5. 没有对应代码块时不要发明内置运行时对象写法。
## 核心规则
@@ -191,7 +191,7 @@ writeLn(inverse_value[2][1]);
- `array((1, 2, 3), (4, 5, 6))``2 x 3` 矩阵样数组。
- `!matrix_value` 返回的是 `3 x 2` 广义逆结果。
- 生成矩阵逆/广义逆时写 `!matrix_value`;不要把它改写成 `1 / matrix_value`
- `!` 不表示逻辑非;逻辑非 [06_expressions_and_operators.md](06_expressions_and_operators.md) 使用 `not`
- `!` 不表示逻辑非;逻辑非 [06_expressions_and_operators.md](06_expressions_and_operators.md) `not` 规则为准
### `msize``mrows``mcols`
@@ -15,7 +15,7 @@
1. 先判断要重载二元算符、下标、`for in`,还是矩阵尺寸函数。
2. 对象重载只照本页明确的 `operator` 签名写,不要从未写入文档资料扩展未知重载。
3. 普通对象模型先回看 `08_objects_and_classes.md`,不要在重载页发明类基础语法。
3. 普通对象模型 `08_objects_and_classes.md` 的事实为准,不要在重载页发明类基础语法。
4. 未列入本页主干的重载族不要写成语法事实。
5. 没有对应代码块时不要发明对象重载/迭代写法。
@@ -553,4 +553,4 @@ end;
- 不要从本页 `operator` 示例外推未写入文档的重载族。
- 重载 `::` / `:.` 遍历时,不要漏掉配套的 `mcell` / `mrow` / `mcol` / `mIndexCount` / `mIndex` 重载,否则遍历体会报 `override function not found`
- 不要把多级 `[]` 下标重载或 `value + obj` 这类右侧算术写成文档事实。
- 不要在本页发明普通类语法;基础对象模型 [08_objects_and_classes.md](08_objects_and_classes.md)。
- 不要在本页发明普通类语法;基础对象模型事实见 [08_objects_and_classes.md](08_objects_and_classes.md)。