示例可拆到多个 .yt;此处为阅读方便写在一起。优先逐字段赋值。
场景 A:订单
金额 {
整数 分 = 0
}
货品 {
文本 编码 = "",
文本 名称 = "",
金额 单价
}
订单行 {
货品 商品,
整数 数量 = 1
}
订单 {
文本 单号 = "",
订单行 第一行,
订单行 第二行
}
函数 行小计分(订单行 行) 整数 {
返回(行.商品.单价.分 * 行.数量)
}
函数 演示订单() {
订单 o
o.单号 = "SO-1001"
o.第一行.商品.编码 = "A01"
o.第一行.商品.名称 = "键盘"
o.第一行.商品.单价.分 = 12900
o.第一行.数量 = 2
o.第二行.商品.编码 = "B02"
o.第二行.商品.名称 = "鼠标"
o.第二行.商品.单价.分 = 5900
o.第二行.数量 = 1
整数 合计 = 行小计分(o.第一行) + 行小计分(o.第二行)
输出(o.单号)
输出(到文本(合计)) // 31700
}
场景 B:矩形与点
点 {
整数 x = 0,
整数 y = 0
}
矩形 {
点 左上,
点 右下
}
函数 矩形宽(矩形 r) 整数 {
返回(r.右下.x - r.左上.x)
}
函数 点在矩形内(点 p, 矩形 r) 逻辑 {
如果 (p.x < r.左上.x)
返回(假)
如果 (p.x > r.右下.x)
返回(假)
如果 (p.y < r.左上.y)
返回(假)
如果 (p.y > r.右下.y)
返回(假)
返回(真)
}
函数 演示碰撞() {
矩形 box
box.左上.x = 10
box.左上.y = 10
box.右下.x = 50
box.右下.y = 40
点 p
p.x = 30
p.y = 20
如果 (点在矩形内(p, box))
输出("命中")
否则
输出("未命中")
输出(到文本(矩形宽(box)))
}
场景 C:数组模拟多节点(避免自引用)
树节点 {
整数 id = 0,
文本 标题 = "",
整数 父id = 0
}
函数 演示树() {
树节点 表[] = [
{1, "根", 0},
{2, "子A", 1},
{3, "子B", 1},
{4, "孙", 2}
]
输出(表[2].标题) // 子A
输出(到文本(表[4].父id)) // 2
}
场景 D:界面配置
窗口配置 {
整数 宽 = 800,
整数 高 = 600,
文本 标题 = "主界面",
逻辑 置顶 = 假
}
主题色 {
整数 r = 32,
整数 g = 32,
整数 b = 32
}
界面配置 {
窗口配置 窗口,
主题色 背景
}
函数 演示配置() {
界面配置 cfg
// 默认值已来自 .yt;按需覆盖
cfg.窗口.标题 = "工作台"
cfg.背景.r = 40
输出(cfg.窗口.标题)
输出(到文本(cfg.背景.r))
}
场景 E:管道式加工 + 数组
函数 缩放(点 p, 整数 k) 点 {
点 r
r.x = p.x * k
r.y = p.y * k
返回(r)
}
函数 偏移(点 p, 点 d) 点 {
点 r
r.x = p.x + d.x
r.y = p.y + d.y
返回(r)
}
函数 演示管道() {
点 表[] = [{1, 2}, {3, 4}]
点 d
d.x = 5
d.y = 5
点 p = 缩放(表[1], 10)
p = 偏移(p, d)
输出(到文本(p.x) + "," + 到文本(p.y)) // 15,25
}
场景 F:部门表(双层下标)
见 09-多层嵌套与下标链.md 示例 B。