Как проверить, начинается ли идентификатор в макросе с подчеркивания?

Мне нужно проверить, начинается ли идентификатор с подчеркивания. Это не работает:

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

Где ошибка?

1 ответ

Решение

Макросы получают "токены" в качестве входных данных; нижнее подчеркивание не является отдельным токеном, и вы не можете сопоставить частичные токены.

Вы могли бы stringify! идентификатор и соответствует имя во время выполнения.

Другие вопросы по тегам