Как принять необязательную конечную запятую в декларативном макросе? [дубликат]

      macro_rules! hashmap {
    ($($key:expr => $value:expr),*) => {
        {
            let mut _map = std::collections::HashMap::new();
            $(
                _map.insert($key, $value);
            )*
            _map
        };
    };
}

let map = hashmap! {
    "a" => 1,
    "b" => 2,
};

Я определил макрос хэш-карты во внешнем коде, я использую его в качестве следующего показанного кода, проблема в том, что последняя запись значения ключа в ["b" =>2] может работать хорошо, но с запятой например, ["b" =>2,] не может скомпилироваться. Я хочу знать, какое правильное правило с повторным совпадением макроса Rust?

1 ответ

Вам необходимо явно принять необязательную конечную запятую в шаблоне макроса:

      macro_rules! hashmap {
    ($($key:expr => $value:expr),* $(,)?) => {
        // ...
    };
}
Другие вопросы по тегам