标准库:Option、assert! 与其它宏
Option:do! 与 destroy_or!
option::do!(opt, |x| …):当opt为some时执行 lambda,传入内部值;常用于取代「is_some+destroy_some+ 分支」的冗长写法。opt.destroy_or!(default):消耗opt,为some则返回值,为none则使用默认值(默认值须已存在)。opt.destroy_or!(abort E):为none时以错误码E中止(E为u64错误常量)。
与 第六章 §6.3 的 API 配合阅读,宏侧更强调消费 Option 时的控制流。
内建 assert!
assert!(cond, code) 是语言内建宏:条件为假时以 code 中止。错误行号指向调用 assert! 的源码位置,便于定位(与宏展开映射一致的设计目标)。详见 第五章 §5.19。
BCS:peel_vec! / peel_option!
在 sui::bcs 中,对向量或 Option 的解码常配合 peel_vec!、peel_option! 等宏,在解码器闭包中组合 peel_* 调用。它们同样是编译期展开,减少手写样板代码。详细步骤见第十二章 BCS 一节。
测试辅助
#[test_only] 模块中常用 assert!;std::unit_test 等模块还提供断言与调试辅助(见测试章)。这些与业务宏无强耦合,但同属「减少重复」的宏工具箱。
小结
把 Option 宏当作控制流压缩写法,把 assert! 当作带行号映射的检查点,把 BCS 宏当作解码样板生成器;需要细节时跳到对应章节即可。