Rust &引用;预期标识符“;创建宏以同时定义可变变量时

Rust &引用;预期标识符“;创建宏以同时定义可变变量时,rust,rust-macros,Rust,Rust Macros,我想同时声明多个可变变量。定义了一个宏来声明可变变量,如下所示 macro_rules! mutf64 { ( $( $e:expr ),+ ) => { { $( let mut $e:f64; )+ } }; } fn main() { mutf64!(FT, FX, alpha, H, K, lambda, T, X); } 使用编译器检查语法时

我想同时声明多个可变变量。定义了一个宏来声明可变变量,如下所示

macro_rules! mutf64 {
    ( $( $e:expr ),+ ) => {
        {
            $(
                let mut $e:f64;
            )+
        }
    };
}

fn main() {
    mutf64!(FT, FX, alpha, H, K, lambda, T, X);
}
使用编译器检查语法时出错:

错误:应为标识符,找到`FT`
-->src/main.rs:5:25
|
5 |让mut$e:f64;
|^^预期的标识符
...
12 | mutf64!(FT,FX,alpha,H,K,lambda,T,X);
|---------------------------------------在此宏调用中
为什么我不能用宏规则来实现这一点呢?

表达式不是标识符。改用这个:

( $( $e:ident ),+ ) => {
声明变量时,需要提供标识符。这样的表达毫无意义:

let mut 1+1;

当我给变量赋值时,我发现我原来的宏有一些错误。使用此修改的宏,我可以为宏定义的变量指定一个新值:

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);
}

这是问题的答案吗?答案基于@Shepmaster建议。