"期望标识符"在创建宏的同时定义可变变量

时间:2018-05-24 14:07:37

标签: rust rust-macros

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

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

执行此操作

2 个答案:

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