🎨 style(markdown): format all markdown files with prettier

- 使用 prettier 格式化所有 markdown 文件
- prose-wrap: always, print-width: 80
- 保持代码块和表格格式
- 提升可读性和一致性

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
csh
2026-01-07 17:18:01 +08:00
co-authored by Claude Sonnet 4.5
parent 7e96bc86d8
commit 99bef309b7
86 changed files with 1858 additions and 981 deletions
+33 -19
View File
@@ -395,7 +395,8 @@ Echo Human.GetAge();
如果某个内容本身可能是 NIL,也可能是对象,如果我们希望当 NIL 的时候访问方法或者成员不报错返回 NIL。
这个时候我们传统需要使用 a?a.b:nil,如果对象访问是嵌套的,例如 a.b.c,那么需要使用 a and a.b?a.b.c:nil,这种情况下使用?.模式会更为表达清晰。
这个时候我们传统需要使用 a?a.b:nil,如果对象访问是嵌套的,例如 a.b.c,那么需要使用 a
and a.b?a.b.c:nil,这种情况下使用?.模式会更为表达清晰。
TSL 支持使用 a?.b?.c 完成上述需求,该功能和 JAVASCRIPT 的?.相仿。同样的,我们也支持 a?.[index]模式访问,当 a 为 NIL 返回 NIL
@@ -592,7 +593,8 @@ Public:公有域内定义的内容均可以被内外部调用
若声明一个成员时没有指定其作用域,则它和前面的成员拥有相同的作用域.
若在类声明的开始没有指定作用域, TSL 成员(包括字段、方法、属性)默认的作用域是 public。
若在类声明的开始没有指定作用域,
TSL 成员(包括字段、方法、属性)默认的作用域是 public。
作用域关键字可以在程序中重复出现多次。
@@ -1025,9 +1027,11 @@ End;
类方法(静态方法)的声明:
声明类方法时 function 前面加 class.形式为:Class Function FunctionName([p1,p2,…))
声明类方法时 function 前面加 class.形式为:Class Function
FunctionName([p1,p2,…))
如果是外联实现,也在实现前面加 class,形式为:Class Function ClassName.FunctionName([p1,p2,…))
如果是外联实现,也在实现前面加 class,形式为:Class Function
ClassName.FunctionName([p1,p2,…))
类方法(静态方法)的调用:
@@ -1117,7 +1121,8 @@ myObj.F1();
###### Inherited
Inherited 是一种调用父类的巧妙的实现,这个实现和 Object pascal 遵循相同的规则。由于 tsl 支持多重继承,因而 Inherited 会优先调用第一个继承的父类,如果没找到则会遍历之后继承的类。
Inherited 是一种调用父类的巧妙的实现,这个实现和 Object
pascal 遵循相同的规则。由于 tsl 支持多重继承,因而 Inherited 会优先调用第一个继承的父类,如果没找到则会遍历之后继承的类。
Inherited 和 java 的 super 有一定的类似之处,但又不相同, java 的 super 可以表达成父类,也可以调用父类的方法,而 Inherited 都是调用父类的方法,而且单独 Inheritd 的写法,在父类不存在方法的时候不会出错,这样的特性非常便于桌面应用开发里的子类窗口的消息事件响应。
@@ -1125,7 +1130,8 @@ Inherited 和 java 的 super 有一定的类似之处,但又不相同, java
方式一:在方法中,增加 inherited;则表示执行父类中存在的与当前方法名同名同参数的方法,若父类中查找不到,不报错,即什么也不做,继续向下执行。
方式二:使用如 inherited func(a,b,c);的模式调用方法,表示调用父类中的该方法,若存在多父类,则按顺序查找,若父类中查找不到,则报错。
方式二:使用如 inherited
func(a,b,c);的模式调用方法,表示调用父类中的该方法,若存在多父类,则按顺序查找,若父类中查找不到,则报错。
例如:
@@ -1196,7 +1202,8 @@ return obj.Method1("S",2,50);
即:Inherited;语句执行父类 Base1 中同名同参数方法 Method1(s,a,b)
Inherited Method2(a,b);执行父类 Base1 中指定方法 Method2,而非当前类 SubClass 的 Method2 方法
Inherited
Method2(a,b);执行父类 Base1 中指定方法 Method2,而非当前类 SubClass 的 Method2 方法
#### 覆盖(override)
@@ -1509,7 +1516,9 @@ End.
Function Create()
TSL 总是为一个类生成默认的公有(public)的 create 方法, 如果显式没有为类声明 public create,对象初始化时就使用默认的 create 方法,如果用户声明了 public create 方法,对象初始化时就执行用户定义的方法。Create 不可以声明为私有(private)的和受保护(protected)的方法,否则对象初始化时不执行自己声明的方法.
TSL 总是为一个类生成默认的公有(public)的 create 方法, 如果显式没有为类声明 public
create,对象初始化时就使用默认的 create 方法,如果用户声明了 public
create 方法,对象初始化时就执行用户定义的方法。Create 不可以声明为私有(private)的和受保护(protected)的方法,否则对象初始化时不执行自己声明的方法.
Create 方法可以被重载(overload)几个不同的定义。
@@ -1810,7 +1819,8 @@ Class(ClassName).FuncName();
属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。
语法:Property PropertyName[(ParamList)] [read fieldOrMethod][write fieldOrMethod][Index IndexValue]
语法:Property PropertyName[(ParamList)] [read
fieldOrMethod][write fieldOrMethod][Index IndexValue]
其中,
@@ -1944,7 +1954,8 @@ Property PropertyName Index IndexValue read ReadMethod write WriteMethod
与数组的区别,调用索引器的时候用圆括号,不能用方括号。
与 Object pascal 不同的地方:TSL 的索引器的索引值除了支持整数以外,还可以支持字符串。
与 Object
pascal 不同的地方:TSL 的索引器的索引值除了支持整数以外,还可以支持字符串。
实例:
@@ -2626,7 +2637,8 @@ Integer</td><td>
注意:
可以显式为参数或返回值定义类型。当定显式义了类型后以上提到的数据类型将会是自定义定义的值,否则是空字符串,这种用法不会真正做类型检查或转化,只是通知 FunctionInfo 中的数据类型,通常用户 Web service 的构建。
可以显式为参数或返回值定义类型。当定显式义了类型后以上提到的数据类型将会是自定义定义的值,否则是空字符串,这种用法不会真正做类型检查或转化,只是通知 FunctionInfo 中的数据类型,通常用户 Web
service 的构建。
### 算符重载
@@ -3270,13 +3282,15 @@ array(3,4,5,1001,7)
继承常规类:直接继承一个已知的类,如 Type ClassA=Class(TStringList)。
继承单元中的类:需要通过 Type ClassA=Class(Unit1.Class1.Class2...)模式来定义类,Class 中包含“单元名.外层类名.内层类名”的完整路径形式,精确指定要继承的类位置。
继承单元中的类:需要通过 Type
ClassA=Class(Unit1.Class1.Class2...)模式来定义类,Class 中包含“单元名.外层类名.内层类名”的完整路径形式,精确指定要继承的类位置。
具体语法如下:
Type ClassA=Class(Unit1.Class1.Class2[,OtherClass...])
例如 Type ClassA = Class(Unit1.Class1.Class2),表示 ClassA 将直接继承单元 Unit1 中 Class1 内部定义的嵌套类 Class2。
例如 Type ClassA =
Class(Unit1.Class1.Class2),表示 ClassA 将直接继承单元 Unit1 中 Class1 内部定义的嵌套类 Class2。
书写时需注意,必须完整、准确的指定从单元名到最终类名的全部路径,否则会执行失败。
@@ -3350,7 +3364,8 @@ classRef.ClassMethodInClass2();//调用父类中类方法
常规类实例:只需提供类名,如 CreateObject("TStringList")或 new TStringList()。
单元中的类实例:需提供完整的类路径(格式:单元名.类名),如 CreateObject("Unit1.Class1.Class2")或 new Unit1.Class1.Class2()。
单元中的类实例:需提供完整的类路径(格式:单元名.类名),如 CreateObject("Unit1.Class1.Class2")或 new
Unit1.Class1.Class2()。
具体语法如下:
@@ -3358,7 +3373,8 @@ obj:=CreateObject("Unit1.Class1.Class2"[,P1,...,PN:any]);//CreateObject 方式
obj:=new Unit1.Class1.Class2([,P1,...,PN:any]);//new 方式
例如 obj:= new Unit1.Class1.Class2(),表示创建单元 Unit1 中 Class1 内部定义的嵌套类 Class2 的实例,并赋值给 obj。
例如 obj:= new
Unit1.Class1.Class2(),表示创建单元 Unit1 中 Class1 内部定义的嵌套类 Class2 的实例,并赋值给 obj。
注:2025-08-27 后的 NG 客户端及使用新一代 TSL 的服务器支持该功能。
@@ -4996,8 +5012,7 @@ C=456.,a=abc,E=666,B=123
a=abc,B=123,C=456.,E=666
差异说明
排序与系统有关,Linux 中,默认是以 C 为标准,按 ASCII 大小排序或比较大小的(即区分大小写),而 windows 中,按字母顺序进行(即不区分大小写)。
差异说明排序与系统有关,Linux 中,默认是以 C 为标准,按 ASCII 大小排序或比较大小的(即区分大小写),而 windows 中,按字母顺序进行(即不区分大小写)。
例如运行下列代码:
@@ -5334,8 +5349,7 @@ obj:=CreateObject('TStringList');
###### Sort
差异说明
排序结果与系统的默认排序规则有关,具体可参考: FAQ:Sorted
差异说明排序结果与系统的默认排序规则有关,具体可参考: FAQ:Sorted
范例