borrow-checker 相关问题

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

如何在 `connect_activate()` 之外创建一个 `glib::MainContext::channel()` 然后将其传入?

我是 Rust 和 GTK 的新手。我想在初始化 gtk::Application 之前创建一个 glib::MainContext::channel() 对。我相信这可以被认为与 std::sync::mpsc 完全一样。同时...

回答 1 投票 0

尝试实现线程安全的缓存

我正在尝试使用 RwLock 后面的 HashMap 来实现共享状态、线程安全的缓存。理想情况下,我希望我的界面公开一个函数,该函数(给定密钥)将返回一个

回答 1 投票 0

具有借用值作为成员的结构的生命周期如何受此借用的影响?

我有一个包含一些值作为起点的结构,请参阅以下工作代码片段: 结构 SomeBigStructWithValues { 值:Vec, other_big_crazy_stuff:使用...

回答 1 投票 0

借来的价值寿命不够长,不确定为什么它仍然是借来的

我的借阅检查器有问题;这是我正在尝试的简化版本: 特质承诺方案 { 类型 Com; fn commit(输入: In) -> Self::Com; fn ...

回答 1 投票 0

T<'a>: 'b 是 'a: 'b 的语法糖吗?

尝试理解在 where 子句中通过生命周期绑定类型的含义。 我目前的理解是,它对参数化类型的每个生命周期都进行了脱糖处理。 对于

回答 1 投票 0

重试以可变引用作为参数的异步函数

我有一个函数 fetch_stuff 需要对 sqlx 连接的可变引用。如果这个函数失败,我想重试N次。我需要对许多类似的功能进行这种重试行为,所以我

回答 1 投票 0

为什么 rust 需要可变引用的显式生命周期而不是常规引用?

这是一个简单的示例,您只需要指定可变引用的生命周期: fn foo<'a>(x: &'a [&'a i32]) -> impl Iterator + 'a { x.iter()....

回答 1 投票 0

如何返回对当前函数拥有的值的可变引用

这是我的结构,我需要一个 get_mut 函数,它返回对以下任一者拥有的值的可变引用 递归地 ctx.scope 或 ctx.parent.scope 酒吧类型 RuntimeContext<'c> = Rc 这是我的结构,我需要一个 get_mut 函数,它返回对以下任一者拥有的值的可变引用 ctx.scope 或 ctx.parent.scope 递归 pub type RuntimeContext<'c> = Rc<RefCell<Context<'c>>>; pub struct Context<'c> { pub parent: Option<RuntimeContext<'c>>, pub scope: HashMap<String, Value>, pub eval: Value, } 这是我尝试过的,但正如预期的那样,借用检查器抱怨cannot return reference to temporary value returns a reference to data owned by the current function,还有什么其他方法可以实现此目的? (保证父ctx勾画出当前ctx) impl<'c> Context<'c> { pub fn get_mut(&mut self, key: &str) -> Option<&mut Value> { if let Some(v) = self.scope.get_mut(key) { Some(v) } else if let Some(parent) = &mut self.parent { parent.borrow_mut().get_mut(key) // here it breaks } else { None } } // ... some other methods } 你不能;根本没有办法返回对包装在 &mut 中的对象成员的 Rc<RefCel<>> 引用。 RefCell 需要一个守卫对象来跟踪该对象当前是否被借用。然而,&mut 引用不会做这样的事情,使得 RefCell 无法知道 &mut 引用在其保护解除后是否存在。这发生在函数末尾。 通常,可以返回仍包含防护对象的内容,但这当然与您想要从 scope 成员返回引用的其他返回路径不兼容。 我可以想到两种方法来实现这一目标: 可以返回引用或保护对象的枚举返回值 类似于基于闭包的方法的上下文管理器,您不返回任何内容,而是使用您的值调用给定的函数 枚举的返回值很难正确获取,并且由于变量的多层深度嵌套,会变得非常复杂。 所以我个人会选择第二种选择。 这可能是这样的: use std::{cell::RefCell, collections::HashMap, rc::Rc}; #[derive(Debug)] pub struct Value; pub type RuntimeContext<'c> = Rc<RefCell<Context<'c>>>; pub struct Context<'c> { pub parent: Option<RuntimeContext<'c>>, pub scope: HashMap<String, Value>, pub eval: Value, } impl<'c> Context<'c> { pub fn get_mut<R>(&mut self, key: &str, f: impl FnOnce(Option<&Value>) -> R) -> R { if let Some(v) = self.scope.get_mut(key) { f(Some(v)) } else if let Some(parent) = &mut self.parent { parent.borrow_mut().get_mut(key, f) // here it breaks } else { f(None) } } // ... some other methods } // Example on how to use this pub fn do_something(context: &mut Context) { let y = context.get_mut("foobarkey", |value| { println!("Got value: {:?}", value); let computed_result = 42; computed_result }); println!("Result: {}", y); }

回答 1 投票 0

Rust 函数中奇怪的生命周期,发生第二次可变借用

我有两段关于寿命的 Rust 代码。第一个只有一个生命周期标记<'a>,无法通过编译。第二个有两个生命标记<'a, 'b>可以通过

回答 1 投票 0

如何迭代存储在结构中的字符串向量而不移动它们?

我有一个大型结构,其中包含一个字符串向量作为成员。我试图迭代这些并将每个传递给另一个采用 &str 参数的方法。后一种方法需要 &mut

回答 1 投票 0

Rust 在 Vec 上的 Reduce 方法参考

我正在尝试将 Vec 的引用减少到其总和,以便我可以计算其平均值。不过,我遇到了编译器问题,并且我没有遵循如何不正确地借用/引用事物...

回答 2 投票 0

正在寻找一种惯用的方法来在 Rust 中迭代构建单链表,并进行逐步调试打印?

我想在构建时迭代调试打印单链表,但我找不到合法的借用方式。 我是否以过于面向对象的方式来解决这个问题? 我需要放弃吗...

回答 1 投票 0

在 Rust 中创建一个迭代器,生成对切片元素的可变引用对,以及剩余元素上的迭代器

我可以通过使用自由函数和 fn 指针来实现所需的行为,而无需自定义迭代器: 使用 std::slice::Iter; 使用 std::iter::Chain; ///将函数 f 应用于...的每个元素

回答 2 投票 0

Rust LinkedList 中的借用检查器错误的原因是什么?

我正在编写一个 fn 来从 LinkedList 中的最后一个 pos 中弹出元素,但是在这种情况下会发生双 mut ref 错误,我试图获取倒数第二个节点,以便可以砍掉尾部 夫...

回答 1 投票 0

为什么我无法移出 Rust 中的 HashMap?

在这个最小的可重现示例中,我们有一个哈希图,其值包含 Vec 不实现 Copy,因此它将在需要时随时移动。 使用...

回答 1 投票 0

一次不能多次借用可变元素(参考嵌套元素)

你能告诉我如何改变这个设计以使其编译吗? 我想获取对集合元素的可变引用,写入它并(一旦我不再需要它)释放它......

回答 1 投票 0

Rust Tree 实现借用问题

我是 Rust 新手,想编写一些代码来提升它的水平。现在我正在编写一个简单的 B 树实现,并且遇到了可变引用的问题。 使用 std::fmt::调试; #[允许(死代码)] #[推导(...

回答 0 投票 0

如何在不触发移动错误的情况下检查标准输出的内容?

在下面的代码中,我将一些文本写入标准输出: 使用标准::{ io::写, sync::{Arc, Mutex}, }; 发布结构 CmdRunner {} impl CmdRunner { pub fn run(&...

回答 1 投票 0

实现树时如何解决借用系统问题?

我正在尝试实现二叉树,以帮助自己熟悉 Rust 处理指针和内存的方式作为练习。我似乎无法弄清楚如何编写 put() 方法。这棵树很...

回答 0 投票 0

当不可变引用可以完成这项工作时,为什么我们需要 Rc<T>?

为了说明 Rc 的必要性,本书提供了以下代码片段(剧透:它不会编译)以表明我们不能在没有 Rc 的情况下启用多重所有权。 枚举列表 { ...

回答 3 投票 0

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