当前位置: 首页 > 知识库问答 >
问题:

为什么这个生锈的HashMap宏不再工作?

边意
2023-03-14

我以前使用过:

#[macro_export]
macro_rules! map(
  { T:ident, $($key:expr => $value:expr),+ } => {
    {
      let mut m = $T::new();
      $(
        m.insert($key, $value);
      )+
      m
    }
 };
)

要创建对象,请执行以下操作:

let mut hm = map! {HashMap, "a string" => 21, "another string" => 33};

然而,这似乎不再有效。编译器报告:

- Failed:
macros.rs:136:24: 136:31 error: no rules expected the token `HashMap`
macros.rs:136     let mut hm = map! {HashMap, "a string" => 21, "another string" => 33};
                                     ^~~~~~~

宏定义发生了什么变化,使其不再工作?

下面的基本示例效果良好:

macro_rules! foo(
  {$T:ident} => { $T; };
)

struct Blah;

#[test]
fn test_map_create() {
  let mut bar = foo!{Blah};
}

这似乎是对{T:ident,$(…),}的一些改变是否正在处理扩展?

这到底是怎么回事?

共有1个答案

仲孙鸣
2023-03-14

您在T之前缺少$符号。

 类似资料:
  • 我可以想到许多地方,C语言中的联合有助于节省内存。因为Rust是一种系统编程语言,为什么它不支持联合呢?

  • 当我只运行预处理器时,输出文件包含20。 然而,据我所知,预处理器只是进行文本替换。所以这就是我认为正在发生的事情(这显然是错误的,但idky): NUM被定义为10 所以我认为输出应该是10而不是20。有什么能解释出哪里出了问题吗?

  • chrome浏览器 onclick链接 O:https://www.w3schools.com窗口打开 X:about:空白窗口打开

  • 为什么它不打印“processTextPosition:ContainsKey”?

  • 我正在将一个rust应用程序打包到docker映像以部署到我的服务器。我发现rust docker的图像大小超过1GB(比使用java和python的任何其他应用程序都大)。为什么rust docker的形象如此巨大?我检查了该层,发现cargo build命令需要400MB以上的内存。 是否可以缩小rust docker的图像?

  • 为什么这不会增加?我正在批处理文件中使用这个。它做任何事情都是正确的,只是没有增加。我做错了什么? 编辑:这不是重复,这是一个完全不同的问题。