Как принять необязательную конечную запятую в декларативном макросе? [дубликат]
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),* $(,)?) => {
// ...
};
}