“真正卫生”在 Rust 中的 Let 语句

主要观点:Remon 是一位负责的库开发者,其库有自动化测试和详尽文档等特点,她关注稳定性、灵活性和正确性。她创作的一个宏 oh_my! 起初存在变量绑定不卫生的问题,经过多次修改,虽解决了部分问题但仍有不足,最终她选择保留稍不卫生的状态。
关键信息

  • Remon 关心 Rust 文化和传统,其宏使用混合位点卫生规则。
  • 最初的宏 oh_my!let Ok(x) 存在变量绑定不卫生导致错误。
  • 通过将模式改为 let Ok(x @ _) 试图解决问题,但又出现编译错误。
  • 最后引入新作用域并定义一个虚拟函数,解决了卫生问题,但增加了代码量和文档负担,Remon 最终选择保留稍不卫生的状态。
    重要细节
  • 给出了导致错误的代码示例 const x: &str = "26ad109e6f4d14e5cc2c2ccb1f5fb497abcaa223"; oh_my!();
  • 解释了 let 绑定不能遮蔽常量以及函数可被遮蔽等规则。
  • 展示了修改后的宏代码 macro_rules! oh_my { () => {{ #[allow(dead_code)] fn x() {} let Ok(x) = read_input() else { return Err(Error) }; $crate::process(x); }}; }
阅读 24
0 条评论