YStudio Y++

09 — 多层嵌套与下标链

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

下标一律从 1 开始。示例用语:部门 / 成员 / 坐标 / 单据。

能力矩阵

写法 支持 说明
线.a.x 纯结构嵌套
线表[1].a.x 数组 + 嵌套字段
部门.成员[1].x 字段数组 + 下标
部门表[1].成员[2].x 外层数组 + 字段数组 + 字段
点[] arr 必须 点 arr[]
点[] 成员(字段) 必须 点 成员[]

类型定义

点 {
    整数 x = 0,
    整数 y = 0
}

部门 {
    文本 名称 = "未命名",
    点 成员[]
}

地址 {
    文本 省 = "",
    文本 市 = ""
}

客户 {
    文本 名称 = "",
    地址 住址
}

单据 {
    文本 单号 = "",
    客户 买方
}

示例 A:单对象字段数组

函数 演示A() {
    部门 d
    d.名称 = "研发"
    d.成员 = [{10, 20}, {30, 40}]

    输出(到文本(d.成员[1].x)) // 10
    d.成员[2].y = 99
    输出(到文本(d.成员[2].y)) // 99
}

链:d.成员[1].x


示例 B:对象数组再进字段数组(重点)

对应:xx[1].xx成员[1].xxx

函数 演示B() {
    部门 表[] = [
        {"甲组", [{1, 2}, {3, 4}]},
        {"乙组", [{5, 6}]}
    ]

    // 表[1] → 第一组;成员[2] → 该组第二个点
    输出(到文本(表[1].成员[2].x)) // 3
    输出(表[1].名称)               // 甲组

    表[2].成员[1].x = 100
    表[2].成员[1].y = 60
    输出(到文本(表[2].成员[1].y)) // 60

    // 中间量(可选)
    点 p = 表[1].成员[1]
    输出(到文本(p.y)) // 2
}

示例 C:三层纯结构(无字段数组)

函数 演示C() {
    单据 o
    o.单号 = "D001"
    o.买方.名称 = "张三"
    o.买方.住址.省 = "浙江"
    o.买方.住址.市 = "杭州"

    输出(o.买方.住址.市) // 杭州
}

链:o.买方.住址.市


示例 D:线数组 + 深层字段

线 {
    点 a,
    点 b
}

函数 演示D() {
    线 表[] = [{{0, 0}, {1, 1}}, {{2, 2}, {3, 3}}]
    输出(到文本(表[2].b.x)) // 3
    表[1].a.y = 8
}

链:表[2].b.x


示例 E:部门表再读名称与坐标

函数 演示E() {
    部门 表[] = [
        {"一车间", [{0, 0}, {1, 0}, {1, 1}]},
        {"二车间", [{2, 2}]}
    ]
    整数 i = 1
    // 读第一组全部成员的 x(循环语法以你工程为准)
    输出(到文本(表[1].成员[1].x))
    输出(到文本(表[1].成员[2].x))
    输出(到文本(表[1].成员[3].x))
    输出(表[2].名称)
}

写法硬规则

  1. 类型 名[] / 类型 字段[],禁止写成 类型[] 名
  2. 下标从 1
  3. 结构 {},数组 []部门 d = {"名", [{1,2}]}
  4. 链顺序:容器[下标].字段数组[下标].标量
  5. 值语义:点 p = 表[1].成员[1] 是副本
  6. 优先逐字段赋值;默认值写在 .yt 标量字段上