Как сопоставить черту в макросе Rust? - PullRequest
1 голос
/ 05 ноября 2019

Моя цель - использовать в качестве входного признака тип.

my_test_macro!(Trait1, Trait2<Test1, Test2=Test3>)

До сих пор я пытался написать такой синтаксический анализатор.

$( $ty:ident < $( $N:ident $(: $b0:ident $(+$b:ident)* )? ),*  $($tname:ident=$ttype:ident),* > )+*

Но это создало локальную неоднозначность.

error: local ambiguity: multiple parsing options: built-in NTs ident ('N') or ident ('tname').

1 Ответ

2 голосов
/ 05 ноября 2019

Вы можете использовать ty или path мета-переменные , в зависимости от того, что вы хотите сделать:

macro_rules! my_test_macro {
    ($t1:ty, $t2:path) => {};
}

fn main() {
    my_test_macro!(Trait1, Trait2<Test1, Test2 = Test3>);
}

См. Также:

...