🐛 fix(tsl-syntax): remove body routing instructions
This commit is contained in:
@@ -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=` 是整除复合赋值。 |
|
||||
| 点前缀复合赋值 | `.&=`、`.|=`、`.^=`、`.&&=`、`.||=` | 位运算或点前缀逻辑需要原地更新时使用。 |
|
||||
| 自增 / 自减 | `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`、`&&`、`||`、`.&&`、`.||`、`.!!` | 默认优先写 `and` / `or` / `not`;不要用 `!` 表示逻辑非。 |
|
||||
| 位运算 | `.&`、`.|`、`.!`、`.^`、`shl`、`shr`、`rol`、`ror` | 生成代码时写成点前缀或关键字形态;普通 `&`、`|`、`~` 不作为位运算写法。 |
|
||||
| 成员 / 下标 / 调用 | `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)。
|
||||
|
||||
Reference in New Issue
Block a user