什么是宏模式中 __impl 的意义?

4
在以下示例中,取自于nom,第一个模式中出现了字符串__impl。从形式语法角度来看,这个元素是什么,为什么要在那里呢?
我认为模式中的字面量__impl以及随后的调用在模式匹配期间被用作虚拟字符串,将内部使用的模式与公共模式分开。但是,“internal”匹配分支对于rustdoc也是隐藏的。那么,__impl部分对Rust还有更重要的意义吗?
#[macro_export]
macro_rules! map(
  // Internal parser, do not use directly
  (__impl $i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => (
    ...
  );
  ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => (
    map!(__impl $i, $submac!($($args)*), $g);
  );
  ($i:expr, $f:expr, $g:expr) => (
    map!(__impl $i, call!($f), $g);
  );
);
1个回答

4
我认为模式中的文字“__impl”和随后的调用只是在匹配模式时用作虚拟字符串,以将内部使用的模式与公共模式分开。
是的,这是一个内部实现细节,用户不应该知道或使用它。但是,宏必须是公共的,因为它们最终会在使用位置被“用户”扩展。
然而,“内部”匹配分支也对rustdoc隐藏起来了。
我不知道你的意思,那个分支在文档中

__impl in docs

参见:

__impl 部分对 Rust 有更多的意义吗?

没有。很多时候,你会看到这个模式以另一个不太可能出现的符号开头,比如 @ 或者 ~


那么,rustdoc 是否知道 "__impl" 并对其进行特殊处理呢? - user2722968

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接