YStudio Y++

自定义类型(`.yt`)

Y++ / YStudio 开发文档 · 一点滴

自定义类型是值语义结构体(拷贝整份数据),与扩展句柄类(HTTP类 / 绘制类 等)不同。

硬约束

  1. .yt 只放类型定义,不写 函数 / 模块级变量。
  2. 数组声明写 点 arr[],不要写 点[] arr。
  3. 下标从 0 开始。
  4. 禁止自引用字段(如 节点 { 节点 下一 })。
  5. 赋值是整份拷贝;函数内改参数不影响实参。
  6. 不要把 .yt 当成类:无方法、无继承(类用 userclass.md)。
  7. 字段默认值:标量 = 10 / = "名" / = 真;数组 = [1,2];单个嵌套类型 = {0,0};嵌套类型数组 = [{0,0},{1,10}](与 .yc 一致:[]=数组,{}=结构)。
  8. 与 DLL:结构指针形参写 &类型名(见 dllapi.md / dll-pointers.md)。

怎么新建

  1. 工程树 → 源代码 → 右键 → 新建自定义类型文件
  2. 输入名称(可省略 .yt)
  3. 文件里只写类型定义

保存后,工程内任意 .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,含多层嵌套与数组)