@@ -4,6 +4,8 @@
|
||||
|
||||
## 本篇职责
|
||||
|
||||
<!-- section-id: syntax-09-001 -->
|
||||
|
||||
回答下面几类最常见的问题:
|
||||
|
||||
- 什么时候该把一组函数写成 `unit`
|
||||
@@ -14,8 +16,13 @@
|
||||
|
||||
## 核心规则
|
||||
|
||||
<!-- section-id: syntax-09-002 -->
|
||||
|
||||
<!-- quickstart-rule: unit-shape -->
|
||||
|
||||
- `unit` 是完整的顶层主体;常见完整形态是 `unit Name; interface ... implementation ... end.`。
|
||||
- `unit` 也可以省略 `interface` / `implementation` 写成简写形态;这种简写里定义的函数对外可调用。
|
||||
<!-- quickstart-rule: unit-default -->
|
||||
- 如果没有特殊需求,默认优先用完整形态;简写形态只在不需要显式区分 `interface` / `implementation` 时再用。
|
||||
- 完整 `unit` 示例中,`implementation` 前保留空行,避免接口段和实现段挤在一起。
|
||||
- `unit` 允许接口声明与实现段分离:`interface` 段可以只声明函数签名或类方法签名,函数体和类方法体放到 `implementation` 段。
|
||||
@@ -33,8 +40,12 @@
|
||||
|
||||
## 示例与行为
|
||||
|
||||
<!-- section-id: syntax-09-003 -->
|
||||
|
||||
### 最小 `unit`
|
||||
|
||||
<!-- section-id: syntax-09-004 -->
|
||||
|
||||
<!-- tags: 怎么写 unit, 模块怎么定义, unit 骨架, 接口段实现段 -->
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -71,6 +82,8 @@ end.
|
||||
|
||||
### 简写 `unit`
|
||||
|
||||
<!-- section-id: syntax-09-005 -->
|
||||
|
||||
<!-- tags: 省略 interface, 最简 unit, 不写接口段 -->
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -104,6 +117,8 @@ end.
|
||||
|
||||
### 顶层、函数体、类体里的 `uses`
|
||||
|
||||
<!-- section-id: syntax-09-006 -->
|
||||
|
||||
<!-- tags: 怎么引入别的文件, 导入模块, uses 写在哪, 引用其他 unit -->
|
||||
|
||||
沿用同一个 `DemoUnit.tsf`,分别看顶层、函数体、类体三种 `uses` 位置:
|
||||
@@ -159,6 +174,8 @@ end;
|
||||
|
||||
### `uses` 的位置限制
|
||||
|
||||
<!-- section-id: syntax-09-007 -->
|
||||
|
||||
<!-- tags: uses 放错地方, 为什么导入失败, 引入语句必须第一行 -->
|
||||
|
||||
代码块身份:反例 / 不可照写
|
||||
@@ -208,6 +225,8 @@ end;
|
||||
|
||||
### `interface` 段 `uses` 和 `implementation` 段 `uses`
|
||||
|
||||
<!-- section-id: syntax-09-008 -->
|
||||
|
||||
<!-- tags: 接口段导入, 实现段导入, 导入放哪一段 -->
|
||||
|
||||
代码块身份:配置片段 / 概念骨架
|
||||
@@ -289,6 +308,8 @@ writeLn(obj.FromImplementation());
|
||||
|
||||
### 接口声明与实现段分离
|
||||
|
||||
<!-- section-id: syntax-09-009 -->
|
||||
|
||||
<!-- tags: 声明和实现分开, 对外暴露哪些, 接口里写什么 -->
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -332,6 +353,8 @@ end.
|
||||
|
||||
### 实现段私有函数
|
||||
|
||||
<!-- section-id: syntax-09-010 -->
|
||||
|
||||
<!-- tags: 内部函数, 不对外暴露, 私有函数怎么写 -->
|
||||
|
||||
代码块身份:配置片段 / 概念骨架
|
||||
@@ -380,6 +403,8 @@ writeLn(PrivateFunc());
|
||||
|
||||
### 重名解析与限定调用
|
||||
|
||||
<!-- section-id: syntax-09-011 -->
|
||||
|
||||
<!-- tags: 两个模块同名函数, 冲突了怎么调, 限定名调用, 指定哪个 unit -->
|
||||
|
||||
重名函数最小对照:
|
||||
@@ -476,6 +501,8 @@ writeLn(objB.value);
|
||||
|
||||
## 默认生成模板
|
||||
|
||||
<!-- section-id: syntax-09-012 -->
|
||||
|
||||
如果你只是要先写出一个最小、可被其他文件引用的 `unit`,从下面这个骨架起步:
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -499,6 +526,8 @@ end.
|
||||
|
||||
## 禁止项
|
||||
|
||||
<!-- section-id: syntax-09-013 -->
|
||||
|
||||
- 把依赖外部 `unit` 的 `uses` 例子误当成单文件最小示例。
|
||||
- 在还没把目标 `unit` 放进查找路径前,就把“找不到接口”误判成 `uses` 语法错。
|
||||
- 把函数体或类定义体里的 `uses` 写在第一条语句之后。
|
||||
|
||||
Reference in New Issue
Block a user