8得票2回答
如何在循环中更新变量以引用在循环内部创建的值?

我希望使用一个被函数借用的变量“n”进入循环。在每一步中,“n”都会取得一个新值;当退出循环时,结合其他变量完成任务,“n”将不会再次使用。 如果我不使用引用,那么代码如下: fn test(n: Thing) -> usize { // stuff let mut ...

196得票2回答
无法移动借用内容 / 无法移动共享引用后面

我不理解错误信息cannot move out of borrowed content。我曾多次收到这个错误并成功解决,但我从未明白其中的原因。例如:for line in self.xslg_file.iter() { self.buffer.clear(); for cu...

8得票1回答
为什么我不能连续两次调用FnMut?

从这里选取代码片段,下面的代码无法编译。 fn foobar<F>(mut f: F) where F: FnMut(i32) -> i32 { println!("{}", f(f(2))); // error: cannot borrow `f...

10得票1回答
当容器创建后借用值被创建时,我该如何向容器添加引用?

出于代码组织的原因,我需要编译器接受以下(简化的)代码: fn f() { let mut vec = Vec::new(); let a = 0; vec.push(&a); let b = 0; vec.push(&b); ...

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) { ...

12得票2回答
循环中的双重可变借用错误即使使用NLL也会发生

假设我有几个类似以下示例的结构,在next()方法中,我需要使用用户提供的缓冲区拉取下一个事件,但如果此事件是注释,并且忽略注释标志设置为true,则需要再次拉取下一个事件:struct Parser { ignore_comments: bool, } enum XmlEvent&...

9得票2回答
当将一个结构体插入到map中时,如何使用结构体的成员作为其自身的键而不会复制它?

是否可以将一个结构体插入到一个map中,其中key由要插入的值所拥有? 在C语言中使用哈希映射时,我已经习惯了这样做。 伪代码示例: struct MyStruct { pub map: BTreeMap<&String, StructThatContainsStr...

7得票1回答
Rust的借用检查器和早期返回

Rust编程语言沙盒链接 struct Foo { val: i32 } impl Foo { pub fn maybe_get(&mut self) -> Option<&mut i32> { Some(&mut ...

14得票1回答
为什么在 Rust 的 `Cell<T>` 中,`set` 方法明确丢弃旧值?

为什么在Cell上定义的set方法,在最后一行明确地删除了old值?难道函数返回时不会自动释放内存吗? use std::mem; use std::cell::UnsafeCell; pub struct Cell&lt;T&gt; { value: UnsafeCell&lt;...

8得票1回答
如何告诉借用检查器一个已清空的Vec不包含任何借用?

我正在处理一个海量的TSV(制表符分隔值)文件,并希望尽可能高效地完成。为此,我想在循环之前预先分配Vec,以避免为每行分配新的Vec: let mut line = String::new(); let mut fields = Vec::with_capacity(headers.len...