You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Rust中HashMap::get的返回结果可同时匹配值与引用两种模式?

问题解答

首先我们先明确HashMap::get方法的返回类型:对于HashMap<K, V>,get方法接收key的引用作为参数,返回值类型是Option<&V>。你的示例中V是i32,因此变量get1的类型是Option<&i32>。

两种匹配模式都合法的原因和逻辑分别如下:

  • 第一种Some(v)的匹配逻辑
    这种写法是直接把Option中包裹的值绑定到v上,因此v的类型就是&i32,和get1内部存储的类型完全一致。你需要通过*v解引用才能拿到i32类型的数值,和示例中的代码逻辑匹配。

  • 第二种Some(&v)的匹配逻辑
    Rust的模式匹配支持解构引用类型:模式中的&符号表示「匹配一个引用,并把引用指向的内容绑定到后面的变量」。因此这里相当于直接把&i32类型的引用解开,将里面存储的i32值绑定到v上,v的类型直接是i32,不需要额外解引用就可以直接使用。

注意:第二种写法只有当V实现了Copy trait的时候才合法,比如示例中的i32是可拷贝的。如果V是没有实现Copy的类型(比如String),Some(&v)的写法会编译报错,因为你不能直接把引用指向的非拷贝类型的所有权转移出来。

内容的提问来源于stack exchange,提问作者Sudarsan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:36:03