问题标签 [borrow-checker]

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 投票
2 回答
2914 浏览

rust - 为什么在这个例子中我得到“借来的价值不够长”?

编者注:这个问题中的代码早于 Rust 1.0。此代码的等效现代版本按原样编译。

我仍然在学习 Rust 的小步骤,并对以下内容感到惊讶。

我不明白为什么这段代码会编译:

虽然这不是:(只是向上移动.iter()

导致此错误:

我确定它与 Rust 作用域等有关,但我不确定我是否理解将方法调用移动到不同的行会产生什么影响。

0 投票
1 回答
1555 浏览

rust - 由于需求冲突,无法推断出自动强制的适当生命周期

我收到此错误 - “由于要求冲突,无法推断自动强制的适当生命周期”。但是,我试图start_duty明确地强制执行要求。

我的代码的一个有点删减的版本会导致错误。从概念上讲,我想做的是生成一个引用职责的新工作。工作只能在职责的整个生命周期内存在;当职责消失时,工作也应该消失。

0 投票
1 回答
576 浏览

rust - Rust:错误:不能借用 `&`-pointer `*strm` 的不可变解引用为可变

我又遇到了借用检查器...

错误是:

我在这里有什么错误?

0 投票
1 回答
680 浏览

rust - 使用带有切片的结构时,“借用值的寿命不够长”

编者注:这个问题中的代码早于 Rust 1.0。从那时起,语义发生了变化,问题中的一些断言不再正确。

我有以下代码:

&当我用(ie )定义一个切片时&[1, 2, 3],如下所示println!

输出是

定义切片&

给我同样的结果

如果我首先尝试将一个 struct 的实例绑定到一个变量A,该实例的a字段是使用对切片的引用(即 using )初始化的&x

我尝试执行与println!以前类似的操作

我明白了

A但是,如果我将其a字段初始化为切片(不是使用切片的引用)的实例绑定&到变量x

我尝试执行与println!以前类似的操作

我收到以下构建错误:

我期待只A { a: &[1, 2, 3] }允许定义,因为A.a应该有&[i64]类型,但显然,Rust 允许我们不包含&符号。

A { a: &[1, 2, 3] }和 和有什么不一样A { a: [1, 2, 3] }?为什么我们允许使用A { a: [1, 2, 3] }(在上面的第二个示例中)?

0 投票
3 回答
1989 浏览

rust - 在迭代可变成员时访问不可变方法

在学习 Rust 中的迭代器时,我创建了以下结构来隐藏二维集合的实现:

iterand方法的目标iter_mut是,该结构的用户无需担心数据是以行优先还是列优先格式存储的;迭代器将简单地以最有效的顺序提供元素。

但是,在使用这种数据结构时,我经常需要知道特定的行和列才能获取一些外部数据:

但是,一旦我尝试调用该get_row_column方法,就会收到以下编译器错误:

完成我在这里尝试做的事情的正确方法是什么? 我可以添加一个set采用行号和列号并显式循环行和列索引的方法,但是用户必须担心行优先与列优先排序:

是否有一种约定或最佳实践来改变结构的内部成员,同时仍然允许访问不可变的成员和方法?或者这是否完全违反了安全保证?

0 投票
1 回答
8020 浏览

rust - 使用 as_slice() 时“借来的值不够长”

我遇到了一个错误:

错误:

不过,对我来说,代码不会出错。为什么我有这个错误?

0 投票
1 回答
157 浏览

reference - 如何从 for 循环中检索用户定义的类型?

我定义了一个Attribute类型,并且我有一个Vec<Attribute>循环来检索“最佳”的类型。这与我的第一次尝试类似:

我有以下编译错误:

在寻找解决方案后,我通过执行以下操作解决了错误:

  1. 向我的结构添加#[derive(Clone)]属性Attribute
  2. 将最后的语句替换为*root = best_attr.clone();

我不完全理解为什么会这样,我觉得这是我遇到的问题的粗略解决方案。这如何解决错误,这是解决此问题的正确方法吗?

0 投票
2 回答
472 浏览

rust - 闭包需要对 lambda 函数的唯一访问

我正在学习 Rust,并且已经实现了一些简单的代码来试验闭包 - 但是我遇到了借用检查器的问题,我不知道如何解决。

编译以下函数时

我收到以下错误

我正在阅读指南,并对为什么借用检查器不喜欢这个有适度的理解——但我不确定如何解决它。

我可以通过首先将第一次调用的结果分配给临时变量,然后f(..)再次调用它来解决它。然而,这感觉不雅。

有没有更干净/更好的写作方式f(f(x)),或者有什么方法可以让编译器相信这是安全的?

0 投票
2 回答
377 浏览

rust - 如何说服借用检查器允许我缓存值?

借阅检查员打败了我:

我得到什么:

如何重写我的代码以使其编译?

0 投票
1 回答
2325 浏览

data-structures - Rust vs Borrow Checker 中的树遍历

我试图在 Rust 中实现一个树结构,遍历它并修改它,但我遇到了借用检查器的问题。我的设置或多或少如下:

我在这里有可变引用,因为我希望能够改变方法返回的节点。例如,一个add方法会调用traverse_path然后为没有匹配节点的路径的其余部分添加节点。

这会产生以下错误:

我理解为什么借用检查器不喜欢这段代码,但我不知道如何使它工作。

我还尝试了使用迭代器的替代实现,使用如下代码:

这里的错误最终与生命周期相关:

我感兴趣的另一件事是收集decoration匹配节点的字段值,并在路径完全耗尽时显示这些值。我的第一个想法是从节点到其父节点的反向链接,但我发现的唯一示例是Rawlinkin DList,这让我感到害怕。我的下一个希望是迭代器实现(如果我能让它工作的话)自然而然地适合这样的事情。那是正确的追求吗?