问题标签 [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 投票
0 回答
143 浏览

rust - 如何使用对要删除的值的引用从 BTreeSet 中删除值?

我有一个自定义Node类型和BTreeSet这些节点中的一个。我想从 中删除一个节点BTreeSet,理想情况下不复制数据。我想在集合中搜索节点,返回引用,然后remove使用返回的引用调用集合。我想通过不可变地借出数据结构来找到一个节点,然后在找到它之后,通过不可变地借出数据结构来删除它:

锈游乐场

我收到一个错误:

最好的方法是什么?

0 投票
2 回答
165 浏览

rust - 为什么这个值的寿命不够长?

我不明白为什么我会从此代码中收到以下编译器错误:

编译器错误:rustc 1.27.1 (5f2b325f6 2018-07-07)

这是我认为这段代码会做的事情,一行一行。这些行中的一行或多行有问题,因为此代码无法编译。

为什么编译器错误说p第 13 行仍有一些东西在借用?不应该hero(以及随后hero.power)在第 11 行被删除吗?p在这一点上应该没有什么可提及的。

p奇怪的是,更改值 (和) 的初始化顺序r解决了这个问题,我不知道为什么。

修复方法:

  1. let p = 90;在第 4 行和第 5 行之间移动第 7行
  2. let r;在第 7 行和第 8 行之间移动第 5行

在这两种情况下,简单地声明rAFTERp可以确保p在删除时没有任何东西仍然“借用”。这对我来说根本没有意义,因为我觉得与或任何可能借用的东西r毫无关系。 pp

此代码在启用非词法生命周期的情况下运行

词法生命周期的什么属性导致它无法编译,非词法生命周期如何解决这个问题?

0 投票
1 回答
544 浏览

rust - 在 Rust 中可变地借用文字的语义是什么?

我发现这可以编译:

这非常令人困惑。可变借用文字的语义是什么?

我来自 C++,编译器绝对不允许我像这样引用右值:

0 投票
0 回答
60 浏览

rust - 在循环具有多态特征的向量时,不能将不可变的“Box”内容“**it”借用为可变的

我决定通过循环一个特征来做一个非常简单的游戏循环Vec。因为特征大小是未知的,所以我需要使用一个Box或一个引用来实现这种多态方法。我的方法可能不是实现这一目标的正确方法。

我试过一个Box

我试过参考:

0 投票
0 回答
28 浏览

rust - 借搬迁建

下面的代码创建一个结构体,该结构体持有一个结构体的引用,该结构体在最后被移出函数。借用检查员生气是因为,我想,移动某物会破坏它的原始位置。我的问题是:在不更改结构定义的情况下,我是否可以在另一个函数中构造一个 B 和一个引用该 B 的 A,然后将它们返回到调用上下文?

0 投票
1 回答
359 浏览

rust - 当返回对作用域外值的可变引用的不可变引用时,为什么在作用域结束时会丢弃可变引用?

block1失败并出现以下错误:

我是否正确假设内部不可变引用超出了block2范围,而在block1中,即使有外部引用,内部可变引用也总是被删除?

0 投票
2 回答
330 浏览

rust - 不关心拥有子结构的递归数据类型

我经常想在 Rust 中定义递归数据类型。我们需要某种程度的间接性来避免具有无限大小的类型。经典的解决方案是使用Box游乐场):

我遇到的问题是它要求列表拥有自己的尾巴。这意味着您不能在共享尾部的两个列表之间共享空间,因为两者都想拥有它。您可以使用借来的参考(playground):

但是很难创建一个列表,因为它不允许拥有自己的尾巴。

有没有办法让列表不在乎它是否拥有尾巴?这样我就可以让一个列表拥有尾部,而另一个列表引用同一个列表作为它的尾部。

我的尝试

我的第一个想法是Cow用于此目的,但我无法让它发挥作用。这就是我尝试过的(游乐场):

但它失败并出现错误

0 投票
1 回答
372 浏览

rust - 添加到基于 RefCell 构建的二叉树时,借用值的寿命不够长

我试图add在二叉树中实现一个操作:

我不明白为什么next变量的寿命不够长:

next存在于函数的整个范围内,add并且在我看来,包含对它的引用的其他变量在删除之前next就被删除了。

编译器这么说"values in a scope are dropped in the opposite order they are created",暗示有另一种方法来声明变量并解决这个问题,但我不知道如何。

0 投票
1 回答
872 浏览

rust - 为什么从 Rust 中的函数返回 &[u8] 而不是 u8 借用 self?

我有以下代码

当我尝试编译这个时,我得到这个错误:

如果我将每个函数的返回类型更改为u8而不是&[u8]编译就好了:

为什么 Rust 不允许我在调用后使用函数中的value属性,但只有在两个函数都返回时才使用?Somethingget_and_incrementself.get&[u8]

0 投票
3 回答
158 浏览

rust - 我如何借用选项中的项目或创建一个新项目时它是无?

当我有一个Option并且想要参考里面的东西或创建一些东西时,如果它是一个None我得到一个错误。

示例代码:

操场

错误:

基本上,创造的价值活得不够长。获取对 a 中的值的引用Some或创建一个值(如果它是 aNone并使用该引用)的最佳方法是什么?