borrow-checker 相关问题

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

如何在 Rust 中迭代 vec 并进行更改?

我正在尝试用 Rust 构建一个任务管理器来进行练习。 我想要一个存档的任务部分,所以这是我的任务管理器结构: pub 结构任务管理器 { 任务:Vec,

回答 1 投票 0

为什么我可以在引用上调用 File.take() ?

当我查看 File 的文档时,我发现 take 方法采用 self,而不是 &self。但我仍然可以在借用的引用上调用该方法: fn foo(文件:&文件) { 让 _ = file.take...

回答 1 投票 0

为什么我不能将捕获的变量移动到闭包中?

这段: 结构任务链 { } 实现任务链 { pub fn add_task(mut self, 工作: T, 参数: A) -> Self 在哪里 T: Fn(usize, A) + '静态, ...

回答 1 投票 0

为什么我可以隐藏之前借用过的变量?楼主在哪里?

试图理解 Rust 中的所有权和借用,我遇到了这个场景,我创建了一个对象 a(应该是所有者),然后将其借入 b。然后,我尝试遮蔽 a: #[推导(

回答 2 投票 0

无法返回引用本地数据的值

我是 Rust 新手。下面的 get_x509 函数会创建一个编译器警告“无法返回引用本地数据 pem.contents 的值”。我想我明白为什么 - 因为返回值

回答 3 投票 0

Rust 添加绑定到借用类型

有没有一种方法可以借用类型并在内部类型上添加特征绑定(即您有类型 &T 但想要说出 T 的位置) 我以为我可以要求 &T 拥有 ToOwned...

回答 1 投票 0

修改切片/引用数组

我是 Rust 新手,我很难理解一些引用/借用行为。 这是一个无法编译的片段。我正在尝试创建一个 u64 数组“

回答 1 投票 0

一个分支中归还的借用与另一分支中的借用重叠

我有一个带有 Option 的结构,用于通过 getter 方法延迟初始化字段。 这是我的简化代码(游乐场): 结构工人{ worktree: Option, // 通过

回答 1 投票 0

Rust 闭包会改变捕获的变量

我正在尝试编写一个将图形转换为非循环的函数。我有这段代码在 Python 中工作,它使用 dfs 函数,该函数需要两个函数:一个在访问节点之前运行,一个在...

回答 1 投票 0

具有对同一类型的另一个实例的可变引用的结构

如何创建一个具有对其自身类型的可选可变引用的结构。不是自我引用,所以实例不同,例如 结构环境<'a> { 外部:选项<&...

回答 2 投票 0

Rust 迭代器或切片滑动可变窗口

我尝试使用迭代器做一个“正确的”Rust 版本的冒泡排序。 明显的代码包含以下几行: 让 mut vi = v.windows(2); 对于 vi 中的 mut i { 如果 i[0] > i[1] { 是...

回答 1 投票 0

如何从RefCell<T>借用T作为参考?

有时我有一个包含包装在 RefCell 中的值的结构,我想借用该值,但我不想使访问器函数的签名依赖于内部

回答 1 投票 0

Rust 借用循环和 Vec

我只是尝试构建一种树:有一个根节点,然后想将节点作为子节点添加到根节点。它遇到了这个错误,我无法理解出了什么问题。 #[d...

回答 2 投票 0

拥有一些数据和对数据的引用的结构[重复]

对象的构造会分配该对象生命周期所需的数据,但也会创建另一个需要保留对数据引用的对象: pub fn new() -> Obj { 让数据 = 比较...

回答 1 投票 0

为什么我们可以将可变引用转换为不可变引用?

来自锈书: 在任何给定时间,您可以拥有一个可变引用或任意数量的不可变引用。 考虑以下代码: fn 主() { 令 mut a = 41; 让 b = &m...

回答 1 投票 0

如何在递归函数中累加值?

我正在尝试了解借用检查器在递归函数调用情况下的工作原理: fn Visit_dirs_rec(dir: &Path, mut acc: Vec) -> 结果 我正在尝试了解借用检查器在递归函数调用情况下的工作原理: fn visit_dirs_rec(dir: &Path, mut acc: Vec<PathBuf>) -> Result<Vec<PathBuf>, io::Error> { if dir.is_dir() { for entry in std::fs::read_dir(dir)? { let entry = entry?; let path = entry.path(); if path.is_dir() { visit_dirs_rec(&path, &acc)?; } else if path.is_file() { acc.push(path) } else { error!("{:?}", path); } } } Ok(acc) } fn visit_dirs(dir: &Path) -> Result<Vec<PathBuf>, io::Error> { visit_dirs_rec(dir, vec![]) } error[E0382]: use of moved value: `acc` --> src/main.rs:16:39 | 10 | fn visit_dirs_rec(dir: &Path, mut acc: Vec<PathBuf>) -> Result<Vec<PathBuf>, io::Error> { | ------- move occurs because `acc` has type `Vec<PathBuf>`, which does not implement the `Copy` trait 11 | if dir.is_dir() { 12 | for entry in std::fs::read_dir(dir)? { | ------------------------------------ inside of this loop ... 16 | visit_dirs_rec(&path, acc)?; | ^^^ value moved here, in previous iteration of loop | note: consider changing this parameter type in function `visit_dirs_rec` to borrow instead if owning the value isn't necessary --> src/main.rs:10:40 | 10 | fn visit_dirs_rec(dir: &Path, mut acc: Vec<PathBuf>) -> Result<Vec<PathBuf>, io::Error> { | -------------- in this function ^^^^^^^^^^^^ this parameter takes ownership of the value help: consider cloning the value if the performance cost is acceptable | 16 | visit_dirs_rec(&path, acc.clone())?; | ++++++++ For more information about this error, try `rustc --explain E0382`. warning: `api` (bin "api") generated 1 warning error: could not compile `api` (bin "api") due to previous error; 1 warning emitted 有没有办法让借阅检查员满意而无需.clone? 您可以向函数传递可变引用,因此所有递归调用都将使用相同的数组: // You need to explicitly mark the function as accepting a mutable reference fn visit_dirs_rec(dir: &Path, acc: &mut Vec<PathBuf>) -> Result<(), io::Error> { if dir.is_dir() { for entry in std::fs::read_dir(dir)? { let entry = entry?; let path = entry.path(); if path.is_dir() { visit_dirs_rec(&path, acc)?; } else if path.is_file() { acc.push(path) } else { error!("{:?}", path); } } } // Value is just added to the input variable, so no need to return anything Ok(()) } fn visit_dirs(dir: &Path) -> Result<Vec<PathBuf>, io::Error> { // create a variable for the values to be outputted into let mut out = vec![] visit_dirs_rec(dir, &mut out)?; // return the output return Ok(out); }

回答 1 投票 0

Rust E0506(借用值的赋值):在看似不相关的表达式上“借用稍后在此处使用”

我正在尝试使用 Option 和 Box 制作一个基本的链表实现,而无需使用不安全模式,并且在尝试制作删除所有内容的方法时遇到了这个特别奇怪的错误

回答 1 投票 0

结构变量的移动是“移动”,但内存中分配了新空间,并且基础值的地址不同

我试图在包含具有实现 Copy 特征的类型的字段的结构的情况下理解 Rust 的移动语义。考虑以下结构: 结构书{ 作者:&'

回答 1 投票 0

如何将一个不透明的值像烫手山芋一样从一个 Enum 构造函数移动到下一个枚举构造函数?

我想将以下填充类型制作为迭代器转换器: 枚举步骤 { 之前(T), 期间(T), 后 } 结构填充 { 步骤: 步骤 } (注意...

回答 1 投票 0

捕获的变量无法逃脱 `FnMut` 闭包主体 `FnMut` 闭包只能在执行时访问其捕获的变量

我有这个代码。孩子们来自Bevy查询。 让 array_of_elements = Children.into_iter() .filter_map(|&item| { 匹配 element_children.get...

回答 1 投票 0

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