我正在经历Rust by Examples - Macros/DSL
代码显示:
macro_rules! calculate {
(eval $e:expr) => {{
{
let val: usize = $e; // Force types to be integers
println!("{} = {}", stringify!{$e}, val);
}
}};
}
fn main() {
calculate! {
eval 1 + 2 // hehehe `eval` is _not_ a Rust keyword!
}
calculate! {
eval (1 + 2) * (3 / 4)
}
}
现在,我希望我的自定义宏calculate
返回计算出的值。我尝试了以下方法:
macro_rules! calculate {
(eval $e:expr) => {{
let val: usize = $e;
println!("{} = {}", stringify!{$e}, val);
val
}};
}
但是它向我返回错误,提示error[E0308]: mismatched types in val, expected type (), found type i32
。
如何修改上面的宏以返回计算值?谢谢。
答案 0 :(得分:0)
我想我知道这是怎么回事。在原始的src代码中,它应以分号结束每个calculate! {...}
宏调用。