在哈希映射中存储对向量项的引用时,绑定的生存时间不够长

2024-01-17

我是 Rust 的新手,仍在与借用检查器和正确的生命周期作斗争。

这是我开始构建的一个简单的结构 - 它存储命令行参数的集合,例如事物(可以用--string or a -c或两者):

struct OptionMap<'a, T: 'a> {
    name: HashMap<String, &'a T>,
    short_name: HashMap<char, &'a T>,
    options: Vec<T>
}

impl<'a, T: 'a> OptionMap<'a, T> {
    pub fn new() -> OptionMap<'a, T> {
        OptionMap {
            name: HashMap::new(),
            short_name: HashMap::new(),
            options: Vec::new()
        }
    }

    pub fn register(&mut self, name: &OptionName, option: T) {        
        if name.name.is_some() {
            self.name.insert(name.name.unwrap().to_owned(), &option);
        }

        if name.short_name.is_some() {
            self.short_name.insert(name.short_name.unwrap(), &option);
        }

        self.options.push(option);
    }
}

我收到其中两个错误(每个错误一个&option我写的参数):

   Compiling glam v0.1.0 (file:///Users/carson/Projects/glam)
src/options.rs:57:66: 57:72 error: `option` does not live long enough
src/options.rs:57                 self.name.insert(name.name.unwrap().to_owned(), &option);
                                                                                   ^~~~~~
src/options.rs:54:62: 66:6 note: reference must be valid for the lifetime 'a as defined on the block at 54:61...
src/options.rs:54     pub fn register(&mut self, name: &OptionName, option: T) {
src/options.rs:55         {
src/options.rs:56             if name.name.is_some() {
src/options.rs:57                 self.name.insert(name.name.unwrap().to_owned(), &option);
src/options.rs:58             }
src/options.rs:59         }
                  ...
src/options.rs:54:62: 66:6 note: ...but borrowed value is only valid for the scope of parameters for function at 54:61
src/options.rs:54     pub fn register(&mut self, name: &OptionName, option: T) {
src/options.rs:55         {
src/options.rs:56             if name.name.is_some() {
src/options.rs:57                 self.name.insert(name.name.unwrap().to_owned(), &option);
src/options.rs:58             }
src/options.rs:59         }
                  ...

我传递对每个哈希映射的引用(因此它们借用它),然后将选项直接传递给向量以将其移动到那里,以便选项不会超出范围。

范围好像是'a以及范围option对我来说应该是一样的 - 因为OptionMap是用生命周期创建的'a, and T也受该生的约束,并且option搬进options在函数的末尾。我缺少什么?我觉得我在 Rust 中不断地与一生作斗争,好像还有一些东西还没有适合我。


我传递了对每个哈希映射的引用(因此他们借用了它)并且 然后将选项直接传递给向量以将其移动到那里,这样 该选项不会超出范围。

一旦借了东西,你就不能把它移到别处。

如果将一个元素放入向量中并从那里借用它,则在借用结束之前无法改变该向量。

换句话说,你当前的方法行不通。

最简单的解决方案可能是将索引存储到哈希映射中的向量中。

或者,可以设计一个可以与短名称和长名称进行比较的奇特键,然后您可以将选项直接存储在单个哈希映射中。我说“可能”是因为我不确定目前是否可能。

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

在哈希映射中存储对向量项的引用时,绑定的生存时间不够长 的相关文章

随机推荐

  • /sbin/ldconfig.real:无法统计 /lib/x86_64-linux-gnu

    当我在 Ubuntu 机器上运行 ldconfig 时 我收到警告 sbin ldconfig real 无法统计 lib x86 64 linux gnu 据我所知 这还没有造成任何问题 但我想 修复 它 以防它稍后回来咬我 有谁知道我为
  • Heroku HIPAA 合规性

    是否可以在 Heroku 上运行符合 HIPAA 要求的应用程序 更具体地说 我需要两个应用程序 一个存储会员信息 另一个存储会员的私人健康信息 我打算使用非对称和对称密钥加密来加密敏感数据 对于将会员与其在其他应用程序上的敏感数据链接起来
  • 如何在 mongoose 中查找包含给定子字符串且带有空格的所有结果

    我找到了很多解决这个问题的方法 但没有一个有效 假设我有以下架构 var Schema new Schema name String url String 假设我的条目之一是 name Product and Services url ww
  • 我无法在 shell 中使用 jq 从 JSON 文件中获取 Key 属性值[重复]

    这个问题在这里已经有答案了 我试图从下面的 JSON 文件中获取密钥 我刚刚执行了下面的命令 它将给出下面的 JSON 输出 Command jq r issues Output expand schema names startAt 0
  • 为什么我的 .storyboards 在 Xcode 11.1 中变成红色?

    刚刚更新到 Mac OS X Catalina 10 15 和 Xcode 11 1 我的一些情节提要变成了红色 所有图形似乎都在那里 但一切都是红色的 非常红 如下所示 他们仍然发布正常 这在我的 MacBook Pro 上的 OS X
  • Character.getNumericValue 的相反是什么

    int x Character getNumericValue A System out println the value of x is x prints 10 我正在寻找一种方法somemethod 10 并返回 A java中是否存
  • 合并msi和exe

    我的部署项目创建 msi 文件和 exe 文件 是否可以将这些合并为一个 exe 是的 您可以创建一个包含 MSI 和 setup exe 引导程序文件的自解压安装程序 我认为可以使用 WinZip 来做到这一点 或者您也可以使用 Wind
  • 保存父实体时,新的子实体将不会保存

    我有一个父实体 foo存在于数据库中 我有一个属性bar在此实体上 一对多关系 Foo已分离 因为它使用 WebApi 进行反序列化 所以我这样做是为了foo context Foos AddOrUpdate foo 就算有新的bar附加到
  • 使用 WebJob 将 Web 应用程序发布到 Azure 时卡住

    我刚刚使用 WebJob SDK 将 WebJob 添加到我的 Web 应用程序中 现在 在发布Web应用程序时 VS在发布时卡住了 不会挂起 但也不会进展 我知道这是由 WebJob 引起的 因为当我删除webjobs list json
  • SQL 用撇号插入数据库

    我正在经典 ASP 上运行一个程序 并使用以下内容插入数据库 CreateJob CommandText INSERT INTO dbo Jobs JobID CompanyName DateReceived DateOfDocument
  • Git 生产/登台服务器工作流程

    目前我的网站 生产服务器 已经有很多代码了 现在我想开始在我的项目中使用 Git 并为我的团队设置一个临时服务器 有人可以给我任何建议吗 这是我脑海中的画面 Production Production server which alread
  • 如何处理外部不稳定的代码?

    I have asp net Web Api 2与外部一起使用的应用程序COM Object pvxcom 由于某些原因 COM 对象挂起 我没有机会报告错误pvxcom 我需要想出一些办法来绕过这个问题 我想澄清一些问题 如何设置外部源的
  • Swift 中的音频播放进度为 UISlider

    我看过一些关于在 Objective C 中实现这一点的帖子 但我无法通过 Swift 做到这一点 具体来说 我不知道如何实施addPeriodicTimeObserverForInterval在下面 var player AVAudioP
  • HTTP POST 和 Google Apps 脚本文件上传

    请原谅这个问题可能存在口是心非 但经过几个小时的搜索无果后 我选择向社区询问以下问题 有没有什么办法 使用以下带有 HTML 和 Javascript 的表单 带有 POST 或 GET 请求 我可以让用户从普通的 HTML 页面提交文件并
  • 如何启用 Weblogic 12.1.2 JPA 2.1

    我一直在将我们的 Web 应用程序部署到 Weblogic 服务器 但是 尽管我能够在这个新版本中成功部署应用程序 但该应用程序无法启动并且用户无法登录 日志是 May 29 2015 4 38 47 PM org springframew
  • 使用 React.js 生成随机数

    我编写了这段代码 但是当我运行它时 我只得到一个空白页 怎么了 看来我确实很接近答案了 我已经尝试了一切 但仍然不起作用 class Button extends React Component constructor props supe
  • VBA 自动化错误 - 关闭表单时出现“服务器 [不是服务器应用程序]”

    我尝试以面向对象的方式创建表单 如这个答案所示 https stackoverflow com a 38382104 4460023 https stackoverflow com a 38382104 4460023 关闭表单后 我想引用
  • 当状态更改导致键盘在工作表中辞去第一响应者身份时,SwiftUI iOS 应用程序崩溃

    我正在尝试创建一个在工作表中查看具有多个 页面 该视图持有一个 State枚举变量 我在页面之间 切换 if self page text else if self page image else 但是 如果在其中一个页面中的文本字段处于活
  • 进行 dockerized 构建,缓存依赖拉取层

    我使用得很开心skaffold开发一些 Kubernetes 服务 但我周期中最长的步骤之一是拉取容器的所有依赖项 有人对如何最好地缓存层中的所有依赖项有建议吗 是否有在 docker 容器内构建 go 二进制文件的最佳实践 我应该有一个层
  • 在哈希映射中存储对向量项的引用时,绑定的生存时间不够长

    我是 Rust 的新手 仍在与借用检查器和正确的生命周期作斗争 这是我开始构建的一个简单的结构 它存储命令行参数的集合 例如事物 可以用 string or a c或两者 struct OptionMap lt a T a gt name