事件管线(Pipeline)
事件声明可以带 before / after / finally 三个管线段,把「发射前后」的规则写进频道本身:before 能改写载荷或取消派发,after 在派发后执行,finally 无条件执行。
三个段
event Order(id: string)
{
before
{
if id == "黑"
{
discard;
}
if id == "改"
{
resume "白";
}
}
after
{
print("[after] 派发完成");
}
finally
{
print("[finally] 恒跑");
}
}发射时的执行序是:before → 派发 → after → finally。三种载荷各走一遍:
func OnOrder(id: string)
{
print("厨房收到", id);
}
Order ~> OnOrder;
emit Order("白单");
print("---");
emit Order("黑");
print("---");
emit Order("改");厨房收到 白单
[after] 派发完成
[finally] 恒跑
---
[finally] 恒跑
---
厨房收到 白
[after] 派发完成
[finally] 恒跑- 白单直通:before 尾部自然结束等于放行,订阅者收到原载荷。
- 黑被
discard;拦下:派发与 after 全部跳过,只有 finally 恒跑。 - 改被
resume "白";改写:订阅者收到的是改写后的载荷。
resume 与 discard 的规则
resume改写载荷,实参必须携带全部载荷字段。discard;是续体段专用的语句软词,只在事件管线与 handle 臂体里合法。- after / finally 是纯执行段:里面不可以写 resume / discard。
event prop 的写位管线
事件属性的写入走同一条管线:before(可改写待写值 / 取消写入)→ 判变 → 存储 → after → 自动 emit → finally。段可以带显式参数表,按 (旧值, 新值) 绑定:
class Gauge
{
public event prop Level: int
{
before(oldV, newV)
{
if newV < 0
{
resume 0;
}
}
}
}resume 只改写新值位,discard; 同时取消写入与广播。显式参数表里旧值只读,不写参数表时用 setter 的 value 参名,机制与 prop 一致。
注意
最后更新于 2026年10月10日
