为什么 Rust 想要一次多次借用一个可变变量?

2023-12-14

我正在尝试用 Rust 实现动态编程问题,以熟悉该语言。与许多动态规划问题一样,这使用记忆来减少运行时间。不幸的是,我的第一次解决方案产生了错误。我已将代码精简为以下内容。警告 - 现在有点荒谬:

use std::collections::HashMap;

fn repro<'m>(memo: &'m mut HashMap<i32, Vec<i32>>) -> Option<&'m Vec<i32>> {
    {
        let script_a = repro(memo);
        let script_b = repro(memo);
    }

    memo.get(&0)
}

fn main() {}

编译错误是:

error[E0499]: cannot borrow `*memo` as mutable more than once at a time
 --> src/main.rs:6:30
  |
5 |         let script_a = repro(memo);
  |                              ---- first mutable borrow occurs here
6 |         let script_b = repro(memo);
  |                              ^^^^ second mutable borrow occurs here
7 |     }
  |     - first borrow ends here

为什么是变量memo多次借用?在我看来,计算时应该借一次script_a,然后借用结束,然后再次借用script_b.


目前最后借用的是它们定义的块(#9113如果实施可能会改变这一点)

问题是 script_a (保存对映射的不可变引用)对整个块有效,并且您尝试使用对同一映射的可变引用:

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

为什么 Rust 想要一次多次借用一个可变变量? 的相关文章

随机推荐

  • 多次加入同一张表

    我可能有点笨 希望有人能帮忙 我有一个简单的 2 列用户表 ID 用户名 我有一个图像评论表 COMMENT COMMENTFROM COMMENTTO COMMENTFROM 是发表评论的用户的 ID COMMENTTO 是添加评论的图像
  • 在 MS Access 中引用可重用表单(2 层)

    我有多个成员 每个成员都有一条包含多个备注字段的记录 Member ID Entry A Entry B 1 memo text memo text 2 memo text memo text 3 memo text memo text 在
  • 在嵌套类中,如何从Python中的嵌套类访问外部类的元素?

    我有这样的场景 我需要要求嵌套类将项目附加到外部类中的列表中 这是伪代码 与我尝试做的类似 我该如何让它发挥作用 class Outer object outerlist class Inner object def call self a
  • 如何在 R 代码中将数据框旋转到二级标题上

    I m still new to R and I ve been struggling with this issue for a couple of days I found some solutions but I m looking
  • Struts2 ActionContext 和 ValueStack?

    我的问题是 在Struts2中 是不是每个action对象都有自己对应的ActionContext和ValueStack呢 换句话说 对于每个新请求 都会创建一个新的操作对象 这是否意味着每次创建新的操作对象时 也会创建新的 ActionC
  • 如何使用 Xcode 4.5 为 iPhone 4 和 iPhone 5 创建 xib

    我已将部署目标设置为 iOS 4 3 并使用 xib 创建视图控制器 但 XCode 4 5 仅为 iPhone 5 4 英寸 创建 xib 如何为 iPhone 4 创建单独的 xib 在视图属性检查器的 模拟指标 部分中 您可以选择 3
  • 如何获取我在 Jquery Tabs UI 中命名的当前选项卡标题

    我在用着http jqueryui com demos tabs manipulation 我想获取我之前命名的当前选定选项卡的标题 例如 来自 href 如何获得 我试过 ui tab attr href 获取选项卡标题的替代方法 var
  • shell 脚本中 test / [ 中的 -d、-e 和 -f 标志有什么区别?

    有什么区别 d e f在 shell 脚本中 我试图理解之间的区别 e d and f参数 例子 if d path if e path if f path 据我所知 d检查目录是否存在 e检查目录和内容 如果目录存在且包含内容则返回 tr
  • Selenium - send_keys() 发送不完整的字符串

    我的问题 我有一个填充字段的方法 但问题是 selenium 没有将完整的字符串发送到该字段 所以我的断言在验证时失败 My code var webdriver require selenium webdriver var casual
  • ios接收udp广播包

    我几乎完全完成了 REST 服务的 iOS 客户端 我唯一缺少的是客户端能够在网络上侦听 UDP 广播 该广播接收主机显示名称和上传的基本 URL 网络上可能有多个服务器正在广播并等待上传 异步是首选 当设备发现服务器时 服务器将显示给用户
  • Android 中的相机预览质量很差

    我正在 Android 中制作一个相机应用程序 并使用以下函数来获取预览尺寸 private Size getOptimalPreviewSize List
  • 当 DNS 无法访问时 URLConnection.setConnectTimeout() 不起作用

    这是我的代码 URL u new URL http www google com URLConnection conn u openConnection conn setConnectTimeout 3000 conn connect 我的
  • 将第 i 个向量编号插入数据框列名称 - R

    这可能是一个快速修复 我试图将向量的第 i 个位置放入数据框列名称中 我正在尝试使用 Paste0 输入第 i 个数字 sma lt 2 20 gt sma 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
  • 使用 sed 在第 N 个匹配模式后插入一些文本

    我怎样才能这样做呢 我有多个例如我的文件中存在 foobar 模式 如何在例如之后添加第四个 some text 以下内容对您有用吗 sed a N ba s foobar 1 nsome text 4 inputfile 对于输入 cat
  • x:Shared = 默认为 false

    是否可以设置x Shared false默认情况下以某种方式 我有很多ResourceDictionary我在添加新项目时经常忘记设置它 这只能在运行时发现 额外问题 Why x Shared智能感知从未显示过 有没有办法来解决这个问题 不
  • JavaScript:条件(三元)与布尔 OR 对于非布尔值?

    在 JavaScript 中 我是否可以始终使用布尔 OR 而不是条件运算符来处理所有类型的变量 例如字符串 函数 例如z x y 代替z x x y 它们很相似 但又不完全相同 x x y最终评估x两次如果x被选中 如果出现以下情况 这可
  • 从动态视图中识别按钮

    我已经为动态布局编写了这段代码 我使用这个循环生成一对按钮 这是我生成它们的代码部分 for int i 1 i lt 2 i Button button1 new Button this button1 setTag age button
  • 如何在 Likert 图的每个条形上输出正确的百分比?

    我试图让我的代码在每个单独的条形顶部输出百分比 现在 下面显示的百分比是错误的 我的代码组合了标签 1 和 2 以及标签 3 和 4 然后在不正确的一侧输出这些数字 是否有一个功能可以正确标记这些条形 我包括我的代码 csv 文件中的数据以
  • UIImageJPEGRepresentation - 内存释放问题

    在iPhone应用程序上 我需要通过邮件发送最大尺寸为300Ko的jpg 我不知道mail app可以有的最大尺寸 但这是另一个问题 为此 我尝试降低质量 直到获得低于 300Ko 的图像 为了获得给我300Ko以下的jpg的质量 压缩级别
  • 为什么 Rust 想要一次多次借用一个可变变量?

    我正在尝试用 Rust 实现动态编程问题 以熟悉该语言 与许多动态规划问题一样 这使用记忆来减少运行时间 不幸的是 我的第一次解决方案产生了错误 我已将代码精简为以下内容 警告 现在有点荒谬 use std collections Hash