问题标签 [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 - 使用构建器模式时“借来的价值不够长”
我有以下代码:
我希望能够做到这一点:
我收到此错误:
错误:借来的值不够长让 mut canvas = Canvas::new(100, 100, &renderer)
为什么返回的Canvas
对象寿命不够长?如果我将结果存储在中间let
,那么它可以工作;为什么?
rust - 存储可变引用和生命周期
我现在花了很多时间试图让它工作,但恐怕我现在唯一的办法就是尝试总结我的代码并向大家寻求帮助。
情况是,如果我取消注释以下代码中的两个实例mut
,它将不再编译(并且不是出于对我有意义的原因):
mut
将引用存储在中时发生的错误Vec
是:
如果有人能解释为什么会这样,我会很高兴;RefCell
从直觉上看,的借用超出范围似乎不应该是一个问题。(Vec
因此RefCell
也是)不拥有引用所指向的数据,那么为什么编译器会关心其引用的生命周期呢?
PS 我知道我的简化代码摘录并没有说明为什么我在 a 中存储可变引用Vec
或者为什么我使用 a RefCell
——尽管可以说这不是偶然的
PPS我尝试在方法和/或特征的关联类型上使用生命周期注释来搞乱一点index
,但到目前为止,我只能设法得到不同的错误
rust - 如何在从成员函数调用的闭包中修改 self ?
我正在尝试计算合法的国际象棋移动,并且在满足借阅检查器时遇到问题。我有一个Chess
实现这些方法的结构(非重要代码替换为...
):
我得到一个编译错误,get_legal_moves
因为我self
在闭包内部进行修改,而get_moves
仍在借用self
.
我创建了一个简化示例,显示了我要解决的问题:
错误:
我怎样才能满足借用检查器以便代码可以编译?
rust - 这种借用的是“锈路”吗?
当我尝试启动另一个应用程序时,在它的标准输入上写一些东西然后等待它完成,我的代码看起来像这样(old_io):
这是有效的,但我不觉得这是要走的路。由于“&mut process.stdin.as_mut().unwrap()”似乎借用了“process”,我需要确保它在再次访问之前超出范围,不是吗?另一个问题是:为什么它需要借用“过程”?
iterator - 使用 Peekable 实现“谨慎”的 take_while
我想Peekable
用作新操作的基础,该cautious_take_while
操作类似于 take_while
fromIteratorExt
但不消耗第一个失败的项目。(还有一个问题是这是否是一个好主意,以及是否有更好的方法来在 Rust 中实现这个目标——我很乐意得到这个方向的提示,但主要是我试图理解我的代码在哪里破)。
我试图启用的 API 基本上是:
我在这里创建了一个 MCVE,但我得到了:
:10:5: 10:19 错误:无法移出借用内容 :10 chars.by_ref().cautious_take_while(|&x| x != '.');
据我所知,TakeWhile
就函数签名而言,我遵循与 Rust 自己相同的模式,但我看到了与借用检查器不同的不同行为。有人可以指出我做错了什么吗?
rust - 借用检查父子关系
我有下面的代码产生在其注释中标记的错误消息。我想我理解了这个信息:我想借用 parent 两次:一次是为了找到它的孩子,一次是作为孩子的参数(并且错误中的可变/不可变词不相关)。我必须证明Child
它在修改时不会消失Parent
。但我不知道该怎么做。除了接缝浪费外,我Rc<Child>
什么都可以,所以我希望增加一些生命周期可以解决问题。
rust - 从结构中获取枚举字段:无法移出借来的内容
我是 Rust 的新手,并试图围绕所有权/借用概念展开思考。现在我已经将我的代码简化为这个给出编译错误的最小代码示例。
我仍然处于价值思维模式所复制的一切之中,这样做是完全合法的,self.color
因为这会让我得到一份Color
. 显然,我错了。我在 SO 上发现了一些关于同样错误的其他问题,但没有解决我的问题。
据我了解,该领域由拥有Display
. 由于我只借用了Display
,因此我不拥有它。提取color
尝试将所有权转让Color
给我,这是不可能的,因为我不拥有Display
. 它是否正确?
我该如何解决?
rust - 为什么编译器告诉我在我已经使用 `let` 绑定时要考虑使用?
我的错误是什么以及如何解决?
(操场)
编译器的错误提示“考虑使用let
绑定”——但我已经是:
这显然是一个新手问题——尽管我认为此时我已经写了足够多的 Rust,以至于我已经掌握了借用检查器......显然我没有。
这个问题类似于Using a `let` binding to increase value lifetime,但不涉及将表达式分解为多个语句,所以我认为问题并不相同。
rust - 为什么变量范围取决于定义顺序?
我有一个基本的(可能是愚蠢的)所有权问题。我正在尝试创建一个来自包装在里面的&str
值String
的向量Some(String)
。我正在使用一个中间变量来存储提取/解包String
,似乎我需要在向量之前定义这个中间变量以满足借用检查器:
工作代码:
非工作代码:
和编译器错误:
问题是:为什么我必须val
在向量之前定义变量v
?如我所见,val
范围与范围相同v
,还是我遗漏了什么?
rust - 显式返回借用引用的匹配语句
在查看 Rust 时,我注意到一种我不太理解的行为。
我有这个代码,它按预期工作:
当我更改它get_or_create_foo()
以使其返回借用的字符串切片时,编译器拒绝编译它。
编译日志:
据我了解,代码是有效的:一旦控制离开match
子句,通过采用导致代码 mutating 的路径,就可以返回提到的借用v
。
我错了吗?当允许这样的代码会导致问题时,谁能举个例子?