问题标签 [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.
rust - 为什么在这个例子中我得到“借来的价值不够长”?
编者注:这个问题中的代码早于 Rust 1.0。此代码的等效现代版本按原样编译。
我仍然在学习 Rust 的小步骤,并对以下内容感到惊讶。
我不明白为什么这段代码会编译:
虽然这不是:(只是向上移动.iter()
)
导致此错误:
我确定它与 Rust 作用域等有关,但我不确定我是否理解将方法调用移动到不同的行会产生什么影响。
rust - 由于需求冲突,无法推断出自动强制的适当生命周期
我收到此错误 - “由于要求冲突,无法推断自动强制的适当生命周期”。但是,我试图start_duty
明确地强制执行要求。
我的代码的一个有点删减的版本会导致错误。从概念上讲,我想做的是生成一个引用职责的新工作。工作只能在职责的整个生命周期内存在;当职责消失时,工作也应该消失。
rust - Rust:错误:不能借用 `&`-pointer `*strm` 的不可变解引用为可变
我又遇到了借用检查器...
错误是:
我在这里有什么错误?
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] }
(在上面的第二个示例中)?
rust - 在迭代可变成员时访问不可变方法
在学习 Rust 中的迭代器时,我创建了以下结构来隐藏二维集合的实现:
iter
and方法的目标iter_mut
是,该结构的用户无需担心数据是以行优先还是列优先格式存储的;迭代器将简单地以最有效的顺序提供元素。
但是,在使用这种数据结构时,我经常需要知道特定的行和列才能获取一些外部数据:
但是,一旦我尝试调用该get_row_column
方法,就会收到以下编译器错误:
完成我在这里尝试做的事情的正确方法是什么? 我可以添加一个set
采用行号和列号并显式循环行和列索引的方法,但是用户必须担心行优先与列优先排序:
是否有一种约定或最佳实践来改变结构的内部成员,同时仍然允许访问不可变的成员和方法?或者这是否完全违反了安全保证?
rust - 使用 as_slice() 时“借来的值不够长”
我遇到了一个错误:
错误:
不过,对我来说,代码不会出错。为什么我有这个错误?
reference - 如何从 for 循环中检索用户定义的类型?
我定义了一个Attribute
类型,并且我有一个Vec<Attribute>
循环来检索“最佳”的类型。这与我的第一次尝试类似:
我有以下编译错误:
在寻找解决方案后,我通过执行以下操作解决了错误:
- 向我的结构添加
#[derive(Clone)]
属性Attribute
- 将最后的语句替换为
*root = best_attr.clone();
我不完全理解为什么会这样,我觉得这是我遇到的问题的粗略解决方案。这如何解决错误,这是解决此问题的正确方法吗?
rust - 闭包需要对 lambda 函数的唯一访问
我正在学习 Rust,并且已经实现了一些简单的代码来试验闭包 - 但是我遇到了借用检查器的问题,我不知道如何解决。
编译以下函数时
我收到以下错误
我正在阅读指南,并对为什么借用检查器不喜欢这个有适度的理解——但我不确定如何解决它。
我可以通过首先将第一次调用的结果分配给临时变量,然后f(..)
再次调用它来解决它。然而,这感觉不雅。
有没有更干净/更好的写作方式f(f(x))
,或者有什么方法可以让编译器相信这是安全的?
rust - 如何说服借用检查器允许我缓存值?
借阅检查员打败了我:
我得到什么:
如何重写我的代码以使其编译?
data-structures - Rust vs Borrow Checker 中的树遍历
我试图在 Rust 中实现一个树结构,遍历它并修改它,但我遇到了借用检查器的问题。我的设置或多或少如下:
我在这里有可变引用,因为我希望能够改变方法返回的节点。例如,一个add
方法会调用traverse_path
然后为没有匹配节点的路径的其余部分添加节点。
这会产生以下错误:
我理解为什么借用检查器不喜欢这段代码,但我不知道如何使它工作。
我还尝试了使用迭代器的替代实现,使用如下代码:
这里的错误最终与生命周期相关:
我感兴趣的另一件事是收集decoration
匹配节点的字段值,并在路径完全耗尽时显示这些值。我的第一个想法是从节点到其父节点的反向链接,但我发现的唯一示例是Rawlink
in DList
,这让我感到害怕。我的下一个希望是迭代器实现(如果我能让它工作的话)自然而然地适合这样的事情。那是正确的追求吗?