如何测试宏中的标识符是否以下划线开头?

How do I test if a identifier in a macro starts with an underscore?

我需要检查标识符是否以下划线开头。这不起作用:

#[macro_export]
macro_rules! UNDECORED {
    (_$_i:ident) => {... do something if underscored};
    ($_i:ident) => {... do something else};
}

哪里错了?

宏接收 "tokens" 作为输入;前导下划线不是单独的标记,您不能匹配部分标记。

您可以 stringify! 标识符并在运行时匹配名称。