spicy(二)unit hooks

unit hooks是用于解析期间控制、跟踪状态和获取结果的代码块。它们类似于函数,但可拥有多个执行主体,当同一钩子有多个主体时会依次执行。常见的7个钩子包括字段和容器钩子,可以直接附加在字段上,通过on <hook name> {}语法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unit hooks,即钩子。用来控制解析,跟踪状态和检索结果。是在解析期间触发执行的代码块,可以访问当前unit实例。

钩子类似于函数:它们是在触发时执行的body主体,这些主体可以接收一组输入参数,但是和函数不同的是,一个钩子可以有多个主体。如果为同一个钩子提供了多个主体实现,他们会依次执行。

最常用的7个钩子:

# 在unit解析之前开始执行
on %init() { ... }

# 在unit解析完成之后执行
on %done { ... }

# 在遇到解析错误时执行,就在解析器中止处理之前
on %error  { ... }

# 以任何方式完成单元解析后执行。  无论解析过程是否成功,此钩子对于修改需要更新的全局状态最有用。  一旦 %init 触发,这个钩子也保证最终执行。  它将分别在 %done 或 %error 之后运行。  (如果在执行 %finally 期间出现新错误,则不会触发单元的 %error 挂钩。)
on %finally  { ... }

# 
on %print  { ... }

# 在解析给定的单位字段后立即执行。  解析后的值可以通过 $$ 访问,可能会应用任何相关的类型转换(请参阅使用 &convert 的动态类型转换)。  同样的内容也已经分配给该字段。
on <field name> { ... } (field hook)

# 假设指定的字段是一个容器(例如,一个向量),这会在每次解析一个新的容器元素时执行,并且就在它被添加到容器之前。  解析后的元素可以通过 $$ 标识符访问,并且可以在存储之前进行修改。  钩子实现也可以使用 stop 语句中止容器解析,而不再添加当前元素。 
on <field name> foreach { 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值