问题描述
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,};
我在前面的代码中定义了一个hashmap宏,我用它作为下一个显示的代码,有一个问题是最后一个键值写入["b"=>2]可以很好地工作,但是像 ["b"=>2,] 这样的逗号不能编译。我想知道 Rust 宏重复匹配的正确规则是什么?
解决方法
您需要在宏模式中明确接受可选的尾随逗号:
macro_rules! hashmap {
($($key:expr => $value:expr),* $(,)?) => {
// ...
};
}