自定义类型是值语义结构体(拷贝整份数据),与扩展句柄类(HTTP类 / 绘制类 等)不同。
硬约束
.yt 只放类型定义,不写 函数 / 模块级变量。
- 数组声明写
点 arr[],不要写 点[] arr。
- 下标从 0 开始。
- 禁止自引用字段(如
节点 { 节点 下一 })。
- 赋值是整份拷贝;函数内改参数不影响实参。
- 不要把
.yt 当成类:无方法、无继承(类用 userclass.md)。
- 字段默认值:标量
= 10 / = "名" / = 真;数组 = [1,2];单个嵌套类型 = {0,0};嵌套类型数组 = [{0,0},{1,10}](与 .yc 一致:[]=数组,{}=结构)。
- 与 DLL:结构指针形参写
&类型名(见 dllapi.md / dll-pointers.md)。
怎么新建
- 工程树 → 源代码 → 右键 → 新建自定义类型文件
- 输入名称(可省略
.yt)
- 文件里只写类型定义
保存后,工程内任意 .yc 自动可用,无需导入。
定义语法
类型名 {
类型 字段 [= 默认值],
…
}
| 字段写法 |
签名语义 |
说明 |
整数 x = 0 |
标量 + 默认 |
, / , / 换行均可分隔 |
文本 名称 |
标量无默认 |
未赋值为空文本;DLL 边界 → LPCWSTR |
文本A 窄串 |
窄串字段 |
语言层同文本;DLL 边界 → UTF-8 LPCSTR(见 dll-pointers.md) |
点 坐标 |
嵌套 .yt |
无方法;整体赋值拷贝 |
点 成员[] |
字段数组 |
不定长;DLL &结构 时跳过不定长 |
整数 标记[4] |
定长数组 |
1≤N≤256 时可进 DLL 编组 |
示例定义
点 {
整数 x = 0,
整数 y = 0
}
矩形 {
整数 top = 0,
整数 left,
整数 right,
整数 bottom = 100
}
部门 {
文本 名称 = "未命名",
点 成员[]
}
.yc 用法签名
| 操作 |
写法 |
说明 |
| 声明 |
点 p / 矩形 r |
应用字段默认值 |
| 写字段 |
p.x = 10 |
|
| 读字段 |
到文本(p.x) |
|
| 一行初始化 |
点 p = {10, 20} |
可选 |
| 数组声明 |
点 arr[] |
禁止 点[] arr |
| 数组初始化 |
点 arr[] = [{1,2},{5,6}] |
下标从 0 |
| 下标写 |
arr[0].x = 11 |
|
| 嵌套链 |
o.买方.住址.市 = "杭州" |
|
| 传参 |
函数 f(点 p) |
值拷贝;改 p 不影响实参 |
点 points
points.x = 10
points.y = 20
矩形 r
r.left = 5
r.right = 200
点 arr[] = [{1, 2}, {5, 6}]
arr[0].x = 11
部门 表[] = [
{"甲组", [{1, 2}, {3, 4}]},
{"乙组", [{5, 6}]}
]
输出(到文本(表[0].成员[1].x)) // 3
规则速查
| 规则 |
说明 |
| 文件内容 |
.yt 只放类型,不写函数/变量 |
| 默认值 |
标量;数组 […];嵌套类型 {…} |
| 分隔 |
, / , / 换行 |
| 自引用 |
禁止 |
| 下标 |
从 0 开始 |
| 值语义 |
赋值拷贝;函数改参数不影响实参 |
易错对照
| 错误 |
正确 |
点[] arr |
点 arr[] |
.yt 里写 函数 xxx() |
函数只写在 .yc |
| 当引用类型改字段期望影响原变量 |
值语义,需返回或再赋值 |
| 下标从 1 起 |
从 0 起 |
DLL 形参写成 矩形 框 期望改字段 |
写 &矩形 框 |
详细文档
详解:examples/usertype/(01~09,含多层嵌套与数组)