我想同时声明多个可变变量。定义一个宏来声明可变变量,如下所示。
macro_rules! mutf64 {
( $( $e:expr ),+ ) => {
{
$(
let mut $e:f64;
)+
}
};
}
fn main() {
mutf64!(FT, FX, alpha, H, K, lambda, T, X);
}
使用编译器进行语法检查时出错:
error: expected identifier, found `FT`
--> src/main.rs:5:25
|
5 | let mut $e:f64;
| ^^ expected identifier
...
12 | mutf64!(FT, FX, alpha, H, K, lambda, T, X);
| ------------------------------------------- in this macro invocation
为什么我不能使用macro_rules
?
答案 0 :(得分:4)
表达式不是标识符。请改用:
( $( $e:ident ),+ ) => {
声明变量时,需要提供标识符。表达没有意义:
let mut 1+1;
答案 1 :(得分:0)
当我为变量分配新值时,我发现原始宏有一些错误。使用此修改后的宏based on @Shepmaster's suggestion,我可以为宏定义的变量分配一个新值:
macro_rules! double {
( $($var:ident),+) => {
$(let mut $var: f64;)+
};
}
fn main() {
double!(FT, FX, alpha, H, K, lambda, T, X);
FT = 2.0;
println!("{}", FT);
}