macro_rules! mtc {
( $ident:ident ) => ("ident");
( $string:expr ) => ("string");
}
fn main() {
println!("{}", mtc!("hi"));
println!("{}", mtc!(a));
}
Run Code Online (Sandbox Code Playgroud)
这不起作用。它失败了:
<anon>:7:25: 7:29 error: expected ident, found "hi"
<anon>:7 println!("{}", mtc!("hi"));
Run Code Online (Sandbox Code Playgroud)
问题是macro_rules!机器无法退出捕获。一旦它开始尝试匹配捕获,它要么成功,要么整个宏调用失败。
为此,您必须在捕获之前提供某种文字匹配,以macro_rules!用于区分规则。例如:
macro_rules! mtc {
( ident $ident:ident ) => ("ident");
( expr $string:expr ) => ("string");
}
Run Code Online (Sandbox Code Playgroud)
另外,要回答隐含的问题:不,没有办法专门匹配字符串文字或任何其他类型的文字。
| 归档时间: |
|
| 查看次数: |
545 次 |
| 最近记录: |