问题标签 [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:精确用例
编辑 2:正如下面的答案所解释的,问题是借用检查器强制生命周期Observer<&mut Type>
与&mut Type
对实际结构做同样的事情)。
所以在我的情况下,我可以通过Observer<Arg>
这样定义来解决:
所以类型参数 Arg 本身不是一个引用,但这使得代码不那么通用。有人有更好的解决方案吗?
rust - 如何为包含原始指针的结构强制执行生命周期?
编者注:此代码不再在 Rust 1.0 中编译并出现错误
parameter `'a` is never used
。此错误的原因正是由于下面演示的问题,因此(更新的)解决方案仍然适用。
此代码块引起了一些混乱:
为什么会这样编译?
当我打电话
它不应该有生命周期b
吗?我预计会出现编译错误,因为生命周期'a
比MutPtr<'b, Bar>
.
rust - 在 Rust 中更改树中的节点
我正在尝试编写一个函数,该函数在给定树结构的情况下返回该树的副本,但在特定索引处更改了节点。这是我到目前为止所拥有的:
我似乎无法摆脱错误,例如:“不能将不可变的借用内容作为可变借用”和“无法移出借用的内容”。
我可以在原始树的基础上从头开始创建新树,并在此过程中更改一个节点。但我想了解如何用借用检查器赢得这场战斗。
rust - 无法从 &mut self 借用文件(错误消息:无法移出借用的内容)
编译它会给我:
为什么会这样?我该怎么做才能解决它?
rust - 即使先前的借用被“忘记”也不能借用指针?
我不明白为什么函数fn1不能编译,即为什么 "let z = &mut x;" 无法分配,而先前存储在“y”中的引用不再使用(“y”被重新分配给其他东西)。
此外,为什么fn2和fn3在“逻辑上”做同样的事情时都可以编译?
fn2实际上与fn1不同,“y”超出范围而不是重新分配,但这仅在“y”指针存储方面有所不同,与“y”指向的内容无关。
实际上, fn3与 fn1 不同, “z”是从“y”分配的,而不是直接从“&mut x”分配的。
reference - 无法移出借用内容/无法移出共享参考
我不明白错误cannot move out of borrowed content
。我收到了很多次,我总是解决它,但我一直不明白为什么。
例如:
产生错误:
在较新版本的 Rust 中,错误是
我通过克隆解决了它line
:
即使在阅读了其他帖子后,我也不明白这个错误:
这种错误的根源是什么?
rust - 在 &mut self 方法中展开成员变量时无法移出借用的内容
我试图在 Rust 中创建一个不相交集数据结构。相关代码为:
我得到的错误是:
我不确定我是否完全理解借用检查器,但我使用引用来避免获取结构本身的所有权,以便可以像使用其他语言一样指向和重新分配它们。
我可以通过从结构中的引用中删除 来避免这些错误mut
,但是我不能更改每个集合的父级,因为它们是不可变的。
我已经阅读了类似的问题,例如:
这些并不能帮助我弄清楚如何解决这个问题。我也尝试过重构函数find
以及要使用的结构本身Rc<RefCell<Set>>
,Box<Set>
但我总是以同样的错误告终。
这是什么错误,我该如何解决?
reference - 尝试转移所有权时无法移出借用的内容
我正在编写一个链表来了解 Rust 的生命周期、所有权和引用。我有以下代码:
但我收到以下编译错误:
较新版本的 Rust 有一个稍微不同的错误:
我认为该head
节点当前必须由 拥有self
,这是链表。当我将其分配给 时new_node.next
,可能会发生所有权变更。
如果可能的话,我宁愿不克隆该值,因为这似乎很浪费。我不想只是在函数期间“借用”它。我真的很想转让它的所有权。
我怎么做?
我已经看过在&mut self 方法中解包成员变量时无法移出借用的内容,以及无法移出借用的内容/无法移出共享引用的后面。
我尝试按照其中一个问题中接受的答案中的建议删除匹配臂,并next
在创建 new时进行定义LinkedListNode
,但我收到了相同的错误消息。
我已成功添加了一个append
方法,该方法需要将 aLinkedListNode
添加到列表的末尾。
rust - 创建 Vec 时,借用价值的寿命不够长
编者注:这个问题是在 Rust 1.0 之前提出的。从那时起,许多函数和类型发生了变化,某些语言语义也发生了变化。问题中的代码不再有效,但答案中表达的想法可能是有效的。
我正在尝试列出目录中的文件并将文件名复制到我自己的Vec
. 我尝试了几种解决方案,但总是以无法创建足够长的生存变量而告终。我不明白我的错误。
为什么编译器会抱怨 "x" ?我不在乎 x,我想要&str
它的内部,我认为它&str
是静态的。
我尝试过这种方式,但我得到了相同的结果,编译器抱怨“路径”的寿命不够长。
这里是操场。