20得票1回答
无法从&mut self借用文件(错误消息:无法移动已借用的内容)

use std::fs::File; use std::io::Read; pub struct Foo { maybe_file: Option<File>, } impl Foo { pub fn init(&mut self) { ...

18得票1回答
为什么我在将可变引用 &mut 传递给接受泛型类型的函数后无法重复使用它?

为什么这段代码无法编译: fn use_cursor(cursor: &mut io::Cursor<&mut Vec<u8>>) { // do some work } fn take_reference(data: &mut Ve...

18得票1回答
在嵌套的数组索引中,“不能作为不可变借用,因为它也被作为可变借用”是什么意思?

在这种情况下,这个错误是什么意思:fn main() { let mut v: Vec<usize> = vec![1, 2, 3, 4, 5]; v[v[1]] = 999; } error[E0502]: cannot borrow `v` as immutab...

17得票2回答
为什么在Iterator和Read traits中使用by_ref().take()的方式不同?

这里有两个函数:fn foo<I>(iter: &mut I) where I: std::iter::Iterator<Item = u8>, { let x = iter.by_ref(); let y = x.take(2); } ...

17得票6回答
借贷检查器没有意识到 `clear` 函数会丢弃对本地变量的引用

以下代码从标准输入中读取以空格分隔的记录,并将逗号分隔的记录写入标准输出。即使进行了优化构建,它仍然相当缓慢(大约比使用 awk 慢两倍)。use std::io::BufRead; fn main() { let stdin = std::io::stdin(); for ...

17得票2回答
迭代可变引用的 trait 对象向量

我有一个struct,它持有对trait对象的可变引用: trait Task { fn do_it(&mut self); } struct Worker<'a> { tasks: Vec<&'a mut Task>, } 在 ...

16得票1回答
无法对生成的子进程进行多次管道传输

我希望能够使用Rust来生成一个子shell,然后重复传递任意命令并处理它们的输出。我在网上找到了很多示例,教我如何传递单个命令并接收其单个输出,但我似乎无法重复执行它们。 例如,下面的代码在注释后的行上挂起。(我想也许read_to_string()正在阻塞,直到它接收到子进程的标准输出,...

15得票2回答
这个不安全的用法是否可以轻松安全?

我遇到了一个Rust借用检查器错误,我相信这是非词法生命周期当前实现的限制。我想要编写的代码大致如下:struct Thing { value: i32 } impl Thing { fn value(&self) -> &i32 { &...

15得票2回答
为什么这个可变借用超出了其作用域的生命周期?

我遇到了一个混乱的错误,关于同时使用可变和不可变借用,在我期望可变借用结束后。我已经对类似问题进行了大量研究(1, 2, 3, 4, 5),这使我相信我的问题与词法生命周期有关(尽管打开NLL功能并在夜间编译时不会改变结果),但我不知道具体是什么;我的情况似乎不符合其他问题的任何情况。 pu...

15得票2回答
如何在 Rust 中对向量元素运行循环并在循环内外更改向量?

我刚接触Rust。 我需要在for循环之前创建一个向量。 在其上运行for循环。 更改for循环中的向量。 然后在for循环之后更改向量。 我尝试了以下代码并尝试使用不可变借用,但两者都没有起作用。fn main() { let mut vec1 = vec![4, 5]; ...