borrow-checker相关内容

如何从HashMap获取可变结构?

我有一个所有状态的哈希图,它是一个 HashMap>,我想调用当前状态的成员 fn init(&mut self).但是我收到以下代码的错误: ...如果让 Some(state) = self.states.get_mut(state_id) {(*state).init();}... 错误如下: src/main.rs:70:25: 70:33 错误:不能将不可变的借来内容作为可变借用s ..
发布时间:2021-07-13 20:54:57 其他开发

亲子关系借用检查器

我有下面的代码产生在其注释中标记的错误消息.我想我理解这个信息:我想借用 parent 两次:一次是为了找到它的孩子,一次是作为孩子的参数(错误中的可变/不可变词不相关).我必须证明 Child 在修改 Parent 时不会消失.但我不知道如何做到这一点.我可以Rc除了接缝浪费之外的所有内容,所以我希望添加一些生命周期可以解决问题. 结构父{使用:i32,孩子:孩子,}结构子{假人 ..
发布时间:2021-07-13 20:53:32 其他开发

函数参数中的可变借用

为什么下面的代码不能编译(游乐场): 使用 std::collections::HashMap;fn 主(){让 mut h: HashMap= HashMap::new();h.插入(0, 0);h.insert(1, h.remove(&0).unwrap());} 借阅检查员抱怨: error[E0499]: 不能一次多次借用 `h` 作为可变变量-->src/main.rs:6:17 ..
发布时间:2021-07-13 20:52:13 其他开发

为什么在调用一个按值获取 self 的方法时会借用一个移动的值,该方法的参数也调用一个方法?

我遇到了一个问题,该问题迫使我将一个漂亮的 oneliner 拆分为带有中间 let 的 {} 块.我根本不清楚这样做的原因.我能够在这个最小的例子中隔离问题: struct AB {一个:u8,乙:u8,}实现 AB {fn foo(&self) ->细绳 {String::from("foo")}fn bar(self, x: String) ->细绳 {格式!("{} - {} - {}! ..
发布时间:2021-07-13 20:51:33 其他开发

从结构中获取枚举字段:无法移出借用的内容

我是 Rust 的新手,并试图围绕所有权/借用概念进行思考.现在我已将我的代码简化为这个会出现编译错误的最小代码示例. pub struct Display {颜色:颜色,}酒吧枚举颜色{蓝色 = 0x1,红色 = 0x4,}impl 显示 {fn get_color_value(&self) ->u16{self.color 为 u16}} src/display.rs:12:9: 12:1 ..
发布时间:2021-07-13 20:50:56 其他开发

如何在同一元素上的另一个可变迭代中迭代可变元素?

我有一个 Element 的数组,我想遍历它来做一些事情,然后遍历循环内的所有 Element 来做一些事情.元素之间存在关系,因此我想迭代所有其他元素以检查某些内容.由于某些原因,元素是可变引用.它有点宽泛,但我正在尝试通用(也许我不应该). struct 元素;impl 元素 {fn do_something(&self, _e: &Element) {}}fn 主(){让 mut 元素 = ..
发布时间:2021-07-13 20:49:08 其他开发

根据同一 Vec 的其他元素删除 Vec 元素的最佳方法

我有一个集合向量,我想删除向量中其他集合的子集的所有集合.示例: a = {0, 3, 5}b = {0, 5}c = {0, 2, 3} 在这种情况下,我想删除 b,因为它是 a 的子集.我可以使用“愚蠢的"n² 算法. 遗憾的是,让它与借用检查器一起工作非常棘手.我想出的最好的是 (Playground): let mut v: Vec>= vec![];让 mut to_dele ..
发布时间:2021-07-13 20:48:57 其他开发

有没有办法在超出范围之前释放绑定?

我正在尝试使用正则表达式解析文件: extern crate 正则表达式;//1.0.1使用正则表达式::正则表达式;fn 示例(section_header_pattern:正则表达式,section_name: &str,mut 行:字符串,mut is_in_right_section: bool,){环形 {如果让 Some(m) = section_header_pattern.cap ..
发布时间:2021-07-13 20:48:18 其他开发

拥有一些数据和对数据的引用的结构

对象的构造分配了该对象生命周期所需的数据,但也创建了另一个需要保留对数据的引用的对象: pub fn new() ->对象{让数据=计算();对象{原文:数据,处理:AnotherObj {参考资料:&data}}} 可以用 Rust 的术语来表达吗? 这里我希望 Obj、AnotherObj 和 data 具有相同的生命周期,当然比 new() 调用. 解决方案 基于您的要求的 ..
发布时间:2021-07-13 20:48:09 其他开发

想要使用模式匹配添加到 HashMap,一次多次获取可变借用

我正在尝试编写一些玩具代码来存储它在 HashMap 中看到一个单词的次数.如果键存在,则将计数器加一,如果键不存在,则将其与值 1 相加.我本能地想通过模式匹配来做到这一点,但我不止一次遇到了一个借用可变错误: fn read_file(name: &str) ->io::Result>{让 b = BufReader::new(File::open(name)?);让 mut c = Has ..
发布时间:2021-07-13 20:46:00 其他开发

选项<接收器>在上一个循环迭代中移动

我正在生成一个线程来做一些工作.有时我希望这个线程在工作完成后死亡,其他时候我希望它等待更多的工作去做.为此,我传入了一个 Option>.如果 Option> 是 None 线程应该死亡,否则它应该等待接收更多工作. fn foo(rx: Option>) {线程::生成(移动 || {环形 {做一些工作();如果让 Some(r) = rx {匹配 r.recv() {好的(x) =>{}错 ..
发布时间:2021-07-13 20:43:28 其他开发

如何传递修改后的字符串参数?

我在 Rust 编程语言 的第 12 章,其中实现了不区分大小写的行搜索.对我来说两次实现相同的逻辑没有意义,所以我想如果我只是调用区分大小写的搜索函数并将参数转换为小写,那可能会奏效.它没有. 这是我的非工作代码: fn main() {let a = search("Waldo", "Waldo 在\n世界的哪个位置?");let b = search("waldo", "Waldo ..
发布时间:2021-07-13 20:42:30 其他开发

可变借入的吸气剂寿命不够长

pub type Data = i32;酒吧结构 Foo {数据:数据,}impl Foo {pub fn data_mut(&mut self) ->&mut 数据{&mut self.data}}pub结构上下文{数据:数据,foos: Vec,}实现上下文{酒吧 fn 坏了(&mut self)->&mut 数据{//这里的生命周期是什么使这个版本不起作用?&mut self.foos.fi ..
发布时间:2021-07-13 20:42:01 其他开发

如何同时迭代 Rust HashMap 并修改其某些值?

我今年在 Rust 中尝试了 Advent of Code,作为学习语言的一种方式.我已将输入(从第 7 天开始)解析为以下结构: struct Process {名称:字符串,重量:u32,儿童:Vec,父级:选项} 这些存储在 HashMap 中.现在我想迭代地图中的值并根据我在父级的“子级"向量中找到的值更新父级值. 行不通的是 for p in self.processes.v ..
发布时间:2021-07-13 20:41:41 其他开发

“不能移出变量,因为它被借用了"旋转变量时

我正在编写一个程序,该程序写入一个文件并时不时地旋转它正在写入的文件.当我检查旋转文件时,我似乎无法更改文件,因为它是由我的结构借用的.即使我 drop 结构的实例,我似乎也无法重新获得文件的所有权来重命名它.这是我的示例: 使用 std::fs::File;使用 std::io::{Write};使用 std::mem::{drop};pub struct FileStruct{酒吧作家:Op ..
发布时间:2021-07-13 20:41:30 其他开发

根据其最后一个元素将某物推入向量

我想获取向量的最后一个元素并使用它来确定要推入的下一个元素.这是一个如何不起作用的示例,但它显示了我想要实现的目标: let mut 向量:Vec= Vec::new();如果让 Some(last_value) = vector.last() {vector.push(*last_value + 1);} 我不能使用 push 而向量也是不可改变地借用的: error[E0502]: 不能 ..
发布时间:2021-07-13 20:40:57 其他开发

从借用对象的循环内部操作对象

我正在用 Rust 编写一些连接到远程服务器的代码,并根据该服务器发送的消息,计算一些统计信息或基于这些统计信息执行操作.但这对我来说更像是一个学习项目,我遇到了一个问题. 这是我为了重现问题而减少到最低限度的代码: //错误的重现代码[E0502]:不能借用 `*self` 作为可变的,因为 `self.server` 也被借用为不可变的使用 std::collections::Hash ..
发布时间:2021-07-13 20:40:16 其他开发

为什么在 &mut self 中允许借用结构成员,而不允许在不可变方法中借用 self ?

如果我有一个封装了两个成员的结构,并根据另一个更新一个成员,只要我这样做就可以了: struct A {值:i64}实现{pub fn new() ->自己 {一个{值:0}}pub fn do_something(&mut self, other: &B) {self.value += other.value;}pub fn 值(&self) ->i64 {自我价值}}结构体 B {酒吧价值: ..
发布时间:2021-07-13 20:38:17 其他开发