📝 docs(tsl): expand syntax operator and object coverage

This commit is contained in:
csh
2026-06-10 15:25:42 +08:00
parent 540b3c0a1b
commit c0c2ffb6eb
6 changed files with 715 additions and 50 deletions
+59 -4
View File
@@ -6,15 +6,15 @@
是否含不可照写反例:是
遇到不确定时:先按本页候选页继续判断;[05_functions_and_calls.md](05_functions_and_calls.md)、[06_expressions_and_operators.md](06_expressions_and_operators.md)、[14_ts_sql.md](14_ts_sql.md)、[15_debug_and_profiler.md](15_debug_and_profiler.md)、[19_namespace_libpath_and_unit_runtime.md](19_namespace_libpath_and_unit_runtime.md)、[21_builtin_runtime_objects.md](21_builtin_runtime_objects.md)、[../reference/catalog/datawarehouse.md](../reference/catalog/datawarehouse.md);仍不命中时回到语法路由中心 [index.md](index.md);如果问题已经超出语法层,回到 TSL 总入口 [../index.md](../index.md)
这一篇只处理运行时环境参数、`with` 后缀、`#` 网格调用、`timeout` 后缀、`dupvalue(...)` 和全局缓存,不处理任何金融业务语义。
这一篇只处理运行时环境参数、块环境 `with` 语句、`with` 后缀、`#` 网格调用、`timeout` 后缀、`dupvalue(...)` 和全局缓存,不处理任何金融业务语义。
## 本篇职责
回答“`setSysParam` / `getSysParam` 怎样用、`sysParams[...]` 是什么、`#Func() with array(...)` 这种后缀环境调用怎样写,网格调用怎样取回结果,以及全局缓存最小读写规则是什么”。
回答“`setSysParam` / `getSysParam` 怎样用、`sysParams[...]` 是什么、块环境 `with *, values do` / `with **, values do` 怎样写、`#Func() with array(...)` 这种后缀环境调用怎样写,网格调用怎样取回结果,以及全局缓存最小读写规则是什么”。
## 智能体运行时上下文判断流程
1. 先判断要操作系统参数、运行时上下文对象、`with` 后缀调用、`#` 网格调用、`timeout` 后缀,还是全局缓存函数。
1. 先判断要操作系统参数、运行时上下文对象、块环境 `with` 语句、`with` 后缀调用、`#` 网格调用、`timeout` 后缀,还是全局缓存函数。
2. 系统参数优先用本页明确的 `setSysParam` / `getSysParam` / `sysParams[...]` 形态。
3. `#Func() with array(...)` 只作为运行时环境调用写法,不要套到普通本地函数。
4. 网格调用返回的不是最终值;需要最终结果时继续写 `dupvalue(...)`
@@ -29,7 +29,10 @@
- TSL 有一组运行时系统参数;本页只写通用语法形态。
- `setSysParam(key, value)``getSysParam(key)` 可以直接用字符串键。
- `sysParams[key]` 可以直接读写这些运行时参数。
- 本页明确的 `with` 形式,是写在函数文件调用后面:`#Func() with array(...)`
- 块环境语句可写成 `with *, sys_param_values do begin ... end``with **, sys_param_values do begin ... end`
- `with *` 会把提供的系统参数合并进当前运行时上下文;不要依赖它在块结束后自动恢复外层值。
- `with **` 会用提供的系统参数建立隔离块环境;块结束后恢复外层系统参数。
- 后缀 `with` 形式写在函数文件调用后面:`#Func() with array(...)`
- `with array(...)` 只在该次调用里临时覆盖对应键,调用结束后会恢复外部原值。
- 如果外部原值本来不存在,`with array(...)` 调用结束后,对应键会恢复成 `nil`
- 不要把上面的后缀 `with` 直接泛化成“任何本地函数调用后面都能接 `with array(...)`”;本地函数后缀 `with` 属于反例。
@@ -85,6 +88,55 @@ writeLn(getSysParam("a"));
- 依次输出 `321``QQ``321`
- 说明 `sysParams[...]``getSysParam(...)` / `setSysParam(...)` 指向的是同一组运行时环境参数
### 块环境 `with *`
代码块身份:可直接照写示例
```tsl
setSysParam("a", 1);
sys_param_values := array("a": 2, "b": 3);
with *, sys_param_values do
begin
writeLn(getSysParam("a"));
writeLn(getSysParam("b"));
end
writeLn(getSysParam("a"));
writeLn(getSysParam("b"));
```
结果说明:
- 块内输出 `2``3`
- 块后输出 `2``3`
- 说明 `with *` 会把传入键合并进当前系统参数上下文;不要把它当成自动恢复外层值的隔离块
### 块环境 `with **`
代码块身份:可直接照写示例
```tsl
setSysParam("a", 1);
setSysParam("b", 9);
sys_param_values := array("b": 4);
with **, sys_param_values do
begin
writeLn(getSysParam("a") = nil);
writeLn(getSysParam("b"));
end
writeLn(getSysParam("a"));
writeLn(getSysParam("b"));
```
结果说明:
- 块内输出 `1``4`
- 块后输出 `1``9`
- 说明 `with **` 不继承未传入的外层系统参数,并且块结束后恢复外层系统参数
沿用同一个 `TestDo.tsf`,看 `with array(...)` 的覆盖边界:
代码块身份:配置片段 / 概念骨架
@@ -259,6 +311,8 @@ writeLn(q[0][0], ',', q[0][1], ';', q[1][0], ',', q[1][1], ';', q[2][0], ',', q[
- 网格超时触发错误时的完整边界
- `getGlobalCacheInfo``listGlobalCache``listGlobalCacheRemoved`
- 初始化 TSL、监控线程、回收策略与兼容旧系统方案
- `with [S => ..., T => ...] do` 块语句
- `{$include ...}` 包含文件指令
这些名称只作为边界提示,不作为本页可生成模板。
@@ -292,6 +346,7 @@ end;
- 把系统参数页直接写成金融函数页。
-`#Func() with array(...)` 误判成也能直接套在本地函数 `Demo()` 后面。
-`with *` 误判成会自动恢复外层系统参数。
- 以为 `with array(...)` 改的是全局永久值,不会恢复外层原环境。
- 把网格句柄直接当最终值用,而不做 `dupvalue(...)`
- 以为从全局缓存取出的值,本地写入后仍然保持缓存身份。