«ожидаемый идентификатор» при создании макроса для одновременного определения изменяемых переменных - PullRequest
0 голосов
/ 24 мая 2018

Я хочу объявить несколько изменяемых переменных одновременно.Определен макрос для объявления изменяемых переменных следующим образом.

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 голосов
/ 26 мая 2018

Я обнаружил некоторые ошибки в моем исходном макросе при назначении нового значения переменной.С этим измененным макросом на основе предложения @ Shepmaster я могу назначить новое значение переменным, определенным макросом:

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);
}
0 голосов
/ 24 мая 2018

выражение не является идентификатором .Используйте это вместо:

( $( $e:ident ),+ ) => {

При объявлении переменных необходимо указать идентификатор.Выражение не имеет смысла:

let mut 1+1;
...