如何添加泛型约束

2023-11-25

我无法找出如何限制泛型类型。看起来像K需要实施core::cmp::Eq and core::hash::Hash特征。我无法在文档中找到所需的语法。

use std::collections::HashMap;

struct Foo<K, V> {
    map: HashMap<K, V>,
}

impl<K, V> Foo<K, V> {
    fn insert_something(&mut self, k: K, v: V) {
        self.map.insert(k, v);
    }
}

编译器错误是:

error[E0599]: no method named `insert` found for struct `std::collections::HashMap<K, V>` in the current scope
 --> src/lib.rs:9:18
  |
9 |         self.map.insert(k, v);
  |                  ^^^^^^ method not found in `std::collections::HashMap<K, V>`
  |
  = note: the method `insert` exists but the following trait bounds were not satisfied:
          `K: std::cmp::Eq`
          `K: std::hash::Hash`
// Edit note, the question is old so the error message from the compiler already hint about the answer, but ignore that.

在哪里可以添加约束K?


首先你可以导入 Hash 特征,use std::hash::Hash;.

您可以在 impl 上添加约束:

impl<K: Eq + Hash, V> Foo<K, V>

或者,使用新的“where”语法

impl<K, V> Foo<K, V>
where
    K: Eq + Hash,

您可以参考书中关于特质界限的章节有关约束的更多背景信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何添加泛型约束 的相关文章

随机推荐

  • 如何在Python 3中将具有属性的对象转换为不带“_”的JSON?

    我想将 Python 对象转换为 JSON 格式 类的私有属性User使用属性定义 方法to Json 我已经发现here class User def init self self name None self gender None p
  • 使用 Java 以编程方式确定 2 个图像是否看起来相同 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 在JAVA中 我试图以编程方式判断两个图像在屏幕上显示时是否相等 又名相同的图像 即使它们具有不同的值 色彩空间 是否有一段代码在呈现 2 个图像时会返回布尔值 我的示例之一是将
  • 如何使 Swig 正确包装在 C 中修改为 Java Something-or-other 的 char* 缓冲区?

    我正在尝试包装一些遗留代码以便在 Java 中使用 我很高兴看到 Swig 能够处理头文件 并且它生成了一个几乎可以工作的出色包装器 现在我正在寻找让它真正发挥作用的深层魔力 在 C 中我有一个看起来像这样的函数 DLL IMPORT in
  • QString 仅替换第一次出现的位置

    有没有简单的方法可以仅用 QString 中的其他子字符串替换某些子字符串的第一次出现 它可以在任何位置 你可以试试这个 QString str this is a string The initial string QString sub
  • 测试嵌套 JavaScript 对象键是否存在

    如果我有一个对象的引用 var test 可能 但不是立即 有嵌套对象 例如 level1 level2 level3 level3 检查深层嵌套对象中是否存在属性的最佳方法是什么 alert test level1 yields unde
  • canvas.toDataURL 不会产生图像/jpeg 数据

    我正在尝试使用 base64 PhoneGap 2 5 将 html5 画布数据保存到服务器 平台 Windows Phone 7 和 8 Android 和 IOS 图像调整大小的基本需求是在通过服务器发送之前优化数据 我遇到了 andr
  • 访问静态成员变量

    我可以使用点表示法访问类的静态成员变量还是应该坚持使用双冒号的访问运算符 如果您有实例变量 则可以使用点运算符来访问静态成员 如果可以访问 include
  • 有没有办法在 C# 中只设置一次属性

    我正在寻找一种方法来允许 C 对象中的属性仅设置一次 编写代码来执行此操作很容易 但我宁愿使用标准机制 如果存在 public OneShot
  • 在 .NET Core 3.0 中从 C# 执行提升的 powershell 脚本

    我正在从 C 代码调用自提升的 powershell 脚本 该脚本重置 DNS 设置 当从未提升的 powershell 调用时 该脚本工作正常 但从 C 代码调用时则不起作用且不会引发异常 我的执行策略暂时设置为不受限制 并且我正在以管理
  • 模态加载 angularjs ui bootstrap 后调用函数

    我在用Angularjs UI bootstrap在我的项目中渲染模态窗口 但在某些情况下 我想在模态加载后调用一个函数 我尝试过 timeout and viewContentLoaded但没有用 任何人都可以帮我解决这个问题 谢谢你们
  • 在做函数指针时,使用取址运算符与不使用它的目的是什么?

    对于以下代码片段 为什么我要使用一个作业而不是另一个作业 谢谢 void addOne int x x 1 void inc int x addOne what is the purpose of doing addOne void inc
  • 删除列表中的重复项

    如何检查列表是否有重复项并返回没有重复项的新列表 获取唯一项目集合的常见方法是使用set 套装有无序的的集合distinct对象 要从任何可迭代对象创建集合 您只需将其传递给内置的set 功能 如果您稍后再次需要一个真实的列表 您可以类似地
  • 如何编写一个特征来检查类型是否可迭代

    有没有办法检查任意变量类型是否可迭代 那么要检查它是否有索引元素或者我实际上可以循环它的子元素吗 例如使用 foreach 是否可以为此创建一个通用模板 我在搜索时发现了其他编程语言的技术 但仍然需要找出如何在 C 中做到这一点 您可以为此
  • Rails 不断告诉我当前尚未安装

    I use rvm管理不同的红宝石及其宝石组合 我的 shell 是 zsh 其中 oh my zsh 配置了基本设置 启用的 oh my zsh 插件有 ruby rails osx 和 git 这是我用来安装 ruby 1 8 7 和r
  • 意外的keyword_end,期待$end(语法错误)

    嘿 我是 ruby on Rails 的新手 我正在尝试从这个博客运行一个简单的程序 但遇到了很多问题错误 http goodbadtech com 2009 05 13 ruby on rails import csv data into
  • 在 Qt 中将字符数组的内容复制到 QString

    我有一个字符指针 在任何运行中都可以有不同的长度 例如 char myChar 一次运行其内容可以是 Hi 在另一次运行中它可以是 Bye 我想复制内容myChar到 QString 例如如果我有 QString myString 我想复制
  • 如何将 Linq 与 Castle ActiveRecord 结合使用

    我正在使用 Castle ActiveRecord 并注意到下载包含该文件 Castle ActiveRecord Linq dll 我还没有找到任何将 Linq 与 ActiveRecord 一起使用的文档 仅some old 博客文章
  • 如何在 C++ 中增加字母?

    我正在用 C 创建凯撒密码 但我不知道如何增加字母 我需要每次将字母加 1 并返回字母表中的下一个字母 像下面这样加 1 a 并返回 b char letter a cout lt lt letter 0 1 这个片段应该可以帮助您入门 l
  • 汇编代码实际上是如何在基础层面上被解释的?

    我真的很喜欢从下到上理解编程 所以 我学习了一台微型 64kb 计算机的内部构造 因为我对从晶体管级别理解计算机非常感兴趣 我了解晶体管 多路复用器 解码器的创建 ALU 的创建等 对于 LC3 我得到了这一点 这是我学到的 像 0001
  • 如何添加泛型约束

    我无法找出如何限制泛型类型 看起来像K需要实施core cmp Eq and core hash Hash特征 我无法在文档中找到所需的语法 use std collections HashMap struct Foo