问题标签 [borrowing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
127 浏览

rust - 如何知道借款何时结束

我写这个是为了简单的输入解析:

上面的代码创建一个String对象,读入一行,用空格分割它并打印输出。然后它尝试使用相同的String对象做同样的事情。编译时出现错误:

As由迭代器String拥有。解决方案描述为:

我在这里有几个问题:

  1. 我已经通过调用每个迭代器来消耗迭代器。它的借用应该已经结束了。
  2. 我如何从函数定义中知道借用的生命周期?
  3. 如果一个函数正在借用一个对象,我怎么知道它释放了它?例如,在使用collect()释放借用的解决方案中。

我想我在这里遗漏了一个重要的概念。

0 投票
1 回答
620 浏览

rust - 当一个对象可能实现多个特征时,如何创建对特征的引用结构?

我有一个管理多个传感器的结构。我有陀螺仪、加速度计、磁力计、气压计和温度计。所有这些都是特质。

我需要将其模块化,以便在配置文件中指定您使用的传感器。

问题是一些传感器重叠。例如:一个人可以拥有一个包含陀螺仪、加速度计和磁力计的 LSM9DS0,而另一个人可以拥有一个 L3GD20 陀螺仪和一个 LSM303D 加速度计、磁力计。

在 C++ 中,我会存储指针或引用,但我不确定如何在 Rust 中安全地正确实现它。

简短版本:需要引用每个传感器作为此结构的成员。其中一些引用属于同一对象。

0 投票
0 回答
50 浏览

hashmap - 从函数返回一个分支后,如何修改借用的 HashMap?

我试图简化我的程序,但如果我使用简单HashMap<u16, u16>而不是嵌套HashMap Polynome类,则不会出现错误。

您将需要这些导入来重现问题:

这些是我的类型:

这是我需要使嵌套HashMap工作的东西:

我有这个功能来找到第一个合理的关键:

我想调用这个函数并根据返回的键执行一些操作,为简单起见,我想从HashMap

这不会编译,因为poly被借用get_first_product并且不能被重新借用:

我该如何解决这个基本任务?我在传递给.clone()之前尝试过,但我收到另一条错误消息:polyget_first_product()

我已经.clone()VarIdx.

处理这种情况的推荐方法是什么?我想避免.clone有一个有效的程序。

这似乎与这个问题没有重复,因为如果我尝试使用非嵌套的 HashMap 而不是 Polynome,则代码编译得很好:

所以有些东西使我的 Polynome 类型与 HashMap 不同。

0 投票
1 回答
202 浏览

for-loop - 如何修复这两个 for 循环以允许修改矢量内容?

我正在尝试对使用Vec<f64>Vec 内部的 a 制作的矩阵进行循环,然后一一更改其元素。

我似乎无法让它发挥作用;我仍然对语法感到困惑......

编译器这样说:

我尝试遵循编译器提示,mut &and .iter()or的各种组合.iter_mut(),但它们都不起作用。在一些挫折之后,我注意到我对解决方案的搜索已经变成了蒙特卡洛算法。

0 投票
1 回答
1492 浏览

rust - 分配给借来的变量如何违反引用规则?

我有这个代码:

这会产生此编译器错误:

Rust 书只有两条规则:

  1. 一个或多个对资源的引用 ( &T),
  2. 正是一个可变引用 ( &mut T)。

我有一个可变变量和一个不可变链接。为什么编译器会报错?

0 投票
3 回答
324 浏览

rust - 借用检查器不允许从树遍历函数返回可变引用

我需要在树中找到具有最大值的节点,假设子节点的值总是大于拥有节点的值,然后修改它:

借用检查器返回此错误:

如果我从 中删除mutfind_max它可以工作,但我不知道如何从find_max.

重要的是它find_max本身不会修改任何东西。它只是搜索合适的节点。

0 投票
2 回答
732 浏览

collections - 如何通过获取可变变量的所有权来替换它的值?

我正在使用 aLinkedList并且我想删除所有未通过测试的元素。但是,我遇到了错误cannot move out of borrowed content

据我了解,这是因为我正在使用&mut self,所以我无权使包含的值之一无效(即移动),即使是片刻也无权构造一个新的值列表。

在 C++/Java 中,我将简单地迭代列表并删除任何符合条件的元素。由于我还没有找到删除,我将其解释为迭代、过滤和收集。

目标是避免创建临时列表、克隆值以及需要获取self并返回“新”对象。我构建了一个产生相同错误的示例。游乐场

在我的实际情况下,我不能简单地使用包装对象,因为它需要从不同的地方引用并包含其他重要值。

在我的研究中,我发现了一些不安全的代码,这让我质疑是否可以构造一个安全的函数来以类似于std::mem::replace.

0 投票
0 回答
117 浏览

rust - 不能从 RefCell 可变地借用

我遇到了一大段代码的问题,但我看不出问题出在哪里

操场

编译器说:

0 投票
0 回答
746 浏览

rust - 一次不能多次借用可变变量

我正在尝试实现一个 trie,但借用检查器真的让我很难过:

add_word方法给出了以下 5 个错误:

这是我试图翻译的 Go 代码:

0 投票
1 回答
652 浏览

reference - 使用可变引用遍历递归结构并返回最后一个有效引用

我正在尝试递归节点结构,修改它们,然后返回Node我得到的最后一个。我使用非词法生命周期 RFC 中的示例解决了循环中可变引用的问题。如果我尝试将可变引用返回到 last Node,我会得到一个use of moved value错误:

给出这个错误

如果我返回临时值而不是中断,我会收到错误cannot borrow as mutable more than once

如何使用可变引用遍历结构并返回最后一个Node?我已经搜索过,但我还没有找到针对这个特定问题的任何解决方案。

我不能使用通过迭代递归结构来获取可变引用,因为它给了我一个多次借用错误: