【发布时间】:2019-06-04 12:27:38
【问题描述】:
我正在通过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的错误。
如何修改上述宏以返回计算值?谢谢。
【问题讨论】:
-
宏 is 返回值,但您在预期
()的上下文中使用宏(因为main返回())。尝试将结果分配给变量。 -
我想我知道它有什么问题。在原始 src 代码中,它应该以分号结束每个
calculate! {...}宏调用!感谢您的意见@FrancisGagné
标签: rust