borrow-checker 相关问题

借用检查器是指Rust编程语言使用的所有权概念的编译时分析。此标记应用于相关问题和错误。

可变借用树的最后一个初始化节点

我试图在第一次访问节点时延迟初始化一棵简单的树。 我的树结构: 结构树{ true_branch:选项>, false_branch:选项>...

回答 1 投票 0

在覆盖 self 之前移出枚举中的可变自引用

我有一个类似有限状态机的枚举,它具有包含不同类型缓冲区的不同状态。 在我的“转换”方法中,我正在更新枚举字段之一,并且有条件地

回答 1 投票 0

字符串文字的生命周期和生命周期不变性

我有以下代码: fn foo<'a>(s1: &mut &'a str, s2: &'a str) { *s1 = s2 } 让 mut x: &'static str = "Hello"; 让 y = String::from("世界"); 为...

回答 1 投票 0

不能借用`x`作为不可变的,因为它也被借用为可变的

我需要迭代并修改 for 循环中的元素,但我还必须将 Vec 传递到修改它的函数中。有没有更好的方法用 Rust 编写这个? 最低可重现代码: fn ...

回答 1 投票 0

使用其他 HashMap 中的值修改 HashMap,其键是从第一个 HashMap 借用的

假设我有两个 HashMap,m1 和 m2,它们具有相同的非复制键集,除了 m2 的键是从 m1 借用的(例如,m1 有 String 键,m2 有从 m1 借用的 &str 键)。可以吗

回答 1 投票 0

借用的价值在 Rust 中存活的时间不够长

使用 std::fs::File; 使用 std::io::{BufRead, BufReader}; fn 主() { if let Ok(file) = File::open("file.bdf") { 让读者= BufReader::new(文件); 让讽刺:Vec use std::fs::File; use std::io::{BufRead, BufReader}; fn main() { if let Ok(file) = File::open("file.bdf") { let reader = BufReader::new(file); let satirlar: Vec<String> = reader.lines().map(|line| line.unwrap()).collect(); let mut GRIDS: Vec<Vec<&str>> = Vec::new(); let mut CQUAD4: Vec<Vec<&str>> = Vec::new(); let mut CBAR: Vec<Vec<&str>> = Vec::new(); let mut RBE3: Vec<Vec<&str>> = Vec::new(); for (index, satir) in satirlar.iter().enumerate() { let a: Vec<&str> = satir.split_whitespace().collect(); let temp = format!("{} {}", satir, &satirlar[index + 1]); let rbe3_concat: Vec<&str> = temp.split_whitespace().collect(); if a[0] == "GRID" { GRIDS.push(a.clone()); } else if a[0] == "CQUAD4" { CQUAD4.push(a.clone()); } else if a[0] == "CBAR" { CBAR.push(a.clone()); } else if a[0] == "RBE3" { RBE3.push(rbe3_concat.clone()); } } error[E0597]: `temp` does not live long enough --> src\main.rs:17:42 | 16 | let temp = format!("{} {}", satir, &satirlar[index + 1]); | ---- binding `temp` declared here 17 | let rbe3_concat: Vec<&str> = temp.split_whitespace().collect(); | ^^^^ borrowed value does not live long enough ... 28 | RBE3.push(rbe3_concat.clone()); | ---- borrow later used here 29 | } 30 | } | - `temp` dropped here while still borrowed 我无法解决这个问题。有人可以帮忙吗? 如果是 RBE3,则应在下一行添加... 我还没有添加代码的其他部分;我在这里遇到问题。 您试图将对内存 (&str) 的引用保存在声明于 的 块之外,在本例中是 for 循环的范围。那根本行不通。您需要循环外部的 Vec 来拥有内存或指向某些堆分配内存的共享指针: fn main() { let mut rbe3: Vec<Vec<String>> = Vec::new(); let satirlar = vec!["RBE3 abc", "RBE3 def", "ghi jkl"]; for (index, satir) in satirlar.iter().enumerate() { if index == satirlar.len() - 1 { break; } let a: Vec<&str> = satir.split_whitespace().collect(); let temp = format!("{} {}", satir, &satirlar[index + 1]); let rbe3_concat: Vec<String> = temp.split_whitespace().map(|x| x.to_owned()).collect(); if a[0] == "RBE3" { rbe3.push(rbe3_concat); } } println!("{:?}", rbe3); } 游乐场 注意 Vec 类型的变化,并注意我们将 .to_owned 映射到子块上。另请注意,我们需要注意不要迭代到数组末尾。另请注意,您的全部大写名称会被 rustfmt 拒绝... 您可以像我之前所说的那样,在堆上分配数据并存储一个共享指针。

回答 1 投票 0

告诉 Rust 编译器返回值不包含构造函数中提供的引用

我有一些包含一些数据的结构,如下所示: 结构体A { // 一些数据 } 结构 B<'s> { a: & 的 mut A c:C<'s> } 实现<'s> B<'s> { 新的(...

回答 1 投票 0

当临时借用闭包拥有的数据时,Rust“借用的数据逃逸到闭包之外”

这是问题的游乐场。这里的代码以一种非常迂回的方式做一些事情,但它是问题的最小重现,仍然有点类似于我的实际程序——我知道......

回答 1 投票 0

在 rust 的 `self` 方法中启动的线程中调用 `self` 的另一个方法

得到了这个相对简单的代码 使用 std:: 线程; 结构运行者{ 数据:字符串 } 实现运行器{ fn new(s: &str) -> 自身 { 自我{数据:s.to_owned()} } fn doit(&...

回答 1 投票 0

Rust 中的不可变和可变借用

我正在尝试开发一个 Rust 应用程序。由于对 Rust 相当陌生,我发现借用检查器很难使用。下面是我从更大的代码库中分离出来的 MRE,但...

回答 1 投票 0

我无法理解的自我相关借用错误

MRE: 使用 std::collections::HashMap; fn 主() { 让 mut 框架 = 框架 { 索引列表:Vec::new(), }; 框架.method_one(); } #[导出(调试)] 结构框架{

回答 1 投票 0

在这个例子中,为什么我不能一次多次借用可变对象?

游戏的最小示例,玩家拥有一个位置并随着时间的流逝而走动。编译如下: 使用 std::thread::sleep; 使用 std::time::Duration; 结构体玩家{ 位置:使用...

回答 1 投票 0

对已经可变引用的对象保持读写控制的最佳“Rust”方法是什么?

假设我想测试一个结构体(消费者)的行为,该结构体对另一个结构体(目标)进行可变引用。测试其正确性的唯一方法是获得对 Ta 的直接读写访问...

回答 1 投票 0

如何避免多次重新实例化正则表达式?

我已经用 Rust 编写了代码 2023 第一天的解决方案,并使其正常工作。总体结构是这样的: fn parse_number(line: &str) -> 选项 { 正则表达式::新(...)....

回答 1 投票 0

如何通过回调构造语义正确的递归可变借用以满足借用检查器的要求?

我有一个通过回调生成数据的结构。在回调内部,我需要修改结构、进程,然后取消修改。在回调结束时,该结构在语义上未修改,但...

回答 1 投票 0

对创建对 String 的寿命更长的引用感到困惑

我正在努力提高我的 Rust 技能,但在如何按照我想要的方式获取引用和生命周期方面遇到了困惑。我正在尝试从字符串中读取行并通过

回答 1 投票 0

如何告诉 Rust 编译器您已经处理了“移动后此处使用的值”情况

这是我的 leetcode 问题之一的代码: pub fn group_strings(字符串: Vec) -> Vec> { 让 mut strings_iter = strings.into_iter(); ...

回答 1 投票 0

尝试循环更新选项时<&str>出现“借用时临时值丢失”的情况

我正在尝试实现一种常用的模式 - 在下一个循环迭代中使用上一个循环迭代的结果。例如,要实现分页,您需要提供...的 id

回答 3 投票 0

如何正确地重新排列代码以绕过 Rust 借用检查器?

代码: 使用 std::collections::HashMap; fn do_something<'a>(map: &'a mut HashMap>, key: &u32) -> &'a mut u32 { if let Some(b) = map.get_mut(key) {

回答 1 投票 0

我在使用此音频库理解 Rust 生命周期时遇到问题

我有多年的编程经验,但我对 Rust 很陌生。在理解如何在特定场景中使用引用时遇到问题,而编译器却没有告诉我我做错了。 继续...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.