如何匹配 Rust 宏中的特征?
How to match a trait in a Rust macro?
我的目标是将特征类型作为输入。
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').
您可以使用 ty
或 path
metavariables,具体取决于您要执行的操作:
macro_rules! my_test_macro {
($t1:ty, $t2:path) => {};
}
fn main() {
my_test_macro!(Trait1, Trait2<Test1, Test2 = Test3>);
}
另请参阅:
- How to match trait bounds in a macro?
我的目标是将特征类型作为输入。
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').
您可以使用 ty
或 path
metavariables,具体取决于您要执行的操作:
macro_rules! my_test_macro {
($t1:ty, $t2:path) => {};
}
fn main() {
my_test_macro!(Trait1, Trait2<Test1, Test2 = Test3>);
}
另请参阅:
- How to match trait bounds in a macro?