@@ -4,14 +4,20 @@
|
||||
|
||||
## 本篇职责
|
||||
|
||||
<!-- section-id: syntax-06-001 -->
|
||||
|
||||
回答“赋值、算术、比较、逻辑、位运算、集合/类型关系、条件求值、表达式对象、访问/调用、点前缀运算符和专题运算符入口在 TSL 里怎样写”。
|
||||
|
||||
## 核心规则
|
||||
|
||||
<!-- section-id: syntax-06-002 -->
|
||||
|
||||
- 本页是 TSL 表达式与运算符的生成规则页;写代码时只使用本页或对应专题页明确记录的运算符和表达式形态。
|
||||
|
||||
### 本页直接生成的运算符
|
||||
|
||||
<!-- section-id: syntax-06-003 -->
|
||||
|
||||
<!-- tags: 运算符一览, 位运算, 逻辑运算, 算术运算, 比较运算, 移位, 按位与或 -->
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
@@ -46,6 +52,8 @@
|
||||
|
||||
### 专题运算符入口
|
||||
|
||||
<!-- section-id: syntax-06-004 -->
|
||||
|
||||
<!-- tags: 运算符去哪查, 特殊符号归属 -->
|
||||
|
||||
| 运算符 / 形态 | 责任页 | 生成规则 |
|
||||
@@ -66,8 +74,10 @@
|
||||
|
||||
默认生成规则:
|
||||
|
||||
- 普通变量赋值使用 `:=`;常量初始化不按普通赋值判断,见 [04_variables_and_constants.md](04_variables_and_constants.md)。
|
||||
- `=` 在普通表达式里用于比较,不用于赋值。
|
||||
<!-- quickstart-rule: assignment -->
|
||||
|
||||
- 普通变量赋值使用 `:=`;`=` 在普通表达式里用于比较,不用于赋值。
|
||||
- 常量初始化不按普通赋值判断,见 [04_variables_and_constants.md](04_variables_and_constants.md)。
|
||||
- `const name = value;` 和函数签名默认参数 `name = value` 不按本页普通表达式比较判断。
|
||||
- 普通算术使用 `+`、`-`、`*`、`/`、`\`、`%`、`div`、`mod`、`^`、`~`。
|
||||
- 需要数值倒数时用 `!x`;整型和实型输入都会得到实型结果。
|
||||
@@ -100,6 +110,8 @@
|
||||
|
||||
## 可直接照写示例
|
||||
|
||||
<!-- section-id: syntax-06-005 -->
|
||||
|
||||
使用这些示例时遵守:
|
||||
|
||||
- `:=` 是普通变量赋值写法;常量初始化规则见 [04_variables_and_constants.md](04_variables_and_constants.md)。
|
||||
@@ -110,6 +122,8 @@
|
||||
|
||||
### 基础赋值和条件求值
|
||||
|
||||
<!-- section-id: syntax-06-006 -->
|
||||
|
||||
<!-- tags: 三目运算, 问号冒号, 条件表达式, 一行判断取值 -->
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -554,6 +568,8 @@ writeLn(if 2 > 1 then 2 else 1);
|
||||
|
||||
### 表达式对象
|
||||
|
||||
<!-- section-id: syntax-06-007 -->
|
||||
|
||||
<!-- tags: 延迟求值, 表达式当值传, eval, 把式子存起来 -->
|
||||
|
||||
`@` 表达式前导:
|
||||
@@ -634,6 +650,8 @@ writeLn(result_value);
|
||||
|
||||
### 空安全访问
|
||||
|
||||
<!-- section-id: syntax-06-008 -->
|
||||
|
||||
<!-- tags: 对象可能为空, 判空取属性, nil 安全, 避免空指针 -->
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -679,6 +697,8 @@ writeLn(c?.a?.[1] = nil);
|
||||
|
||||
### 否定形式运算
|
||||
|
||||
<!-- section-id: syntax-06-009 -->
|
||||
|
||||
<!-- tags: 取反, 不包含, 不匹配, not in 怎么写 -->
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -707,6 +727,8 @@ end;
|
||||
|
||||
### 标量链式比较
|
||||
|
||||
<!-- section-id: syntax-06-010 -->
|
||||
|
||||
<!-- tags: 连续比较, 区间判断, 夹在中间, 大小连写 -->
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -733,6 +755,8 @@ writeLn(1 :<> 2 :<> 3);
|
||||
|
||||
### 矩阵链式比较
|
||||
|
||||
<!-- section-id: syntax-06-011 -->
|
||||
|
||||
<!-- tags: 数组逐元素比较, 整列比较, 批量比较 -->
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -763,6 +787,8 @@ writeLn(s[2]);
|
||||
|
||||
### 条件编译探测
|
||||
|
||||
<!-- section-id: syntax-06-012 -->
|
||||
|
||||
<!-- tags: 判断支持哪些特性, 版本探测, ifdef 怎么用 -->
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -791,6 +817,8 @@ writeLn(0);
|
||||
|
||||
## 默认生成模板
|
||||
|
||||
<!-- section-id: syntax-06-013 -->
|
||||
|
||||
如果你只需要最小的“比较 + 三目”例子,直接用这个:
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -809,6 +837,8 @@ writeLn(value);
|
||||
|
||||
## 禁止项
|
||||
|
||||
<!-- section-id: syntax-06-014 -->
|
||||
|
||||
- 用 `=` 当赋值运算符。
|
||||
- 把 `==` / `!=` 当成等值 / 不等值比较;本页比较使用 `=` / `<>`。
|
||||
- 把 `!` 当成逻辑非;本页逻辑非使用 `not`,`!` 是一元倒数/矩阵逆相关运算符。
|
||||
|
||||
Reference in New Issue
Block a user