borrow-checker相关内容
尝试使用与下面的(代码9)中的 print 函数完全相同的闭包时,我得到一个错误 错误是通常的借入值寿命不足.我试图在操场中复制它,但是我不能.我敢肯定这主要是因为我不太了解这里发生的事情,因此我们将不胜感激. 我不明白的是,调用 print 函数和调用 check 闭包之间有什么区别.它们具有完全相同的签名,甚至具有相同的主体. 创建它们的上下文如何影响借阅检查器?对此有什么解
..
我有一个方法make_iter(),该方法在Rust中创建具有多个适配器的Iterator,可以将其简化为以下MCVE: fn make_iter(first: &First) -> Box + '_> { Box::new(first.make_objects().flat_map(|second| { sec
..
对我来说很清楚,对向量进行迭代不应该让循环体随意改变向量.这样可以防止迭代器失效,而迭代器失效容易导致错误. 但是,并非所有类型的突变都会导致迭代器失效.请参见以下示例: let mut my_vec: Vec> = vec![vec![1,2], vec![3,4], vec![5,6]]; for inner in my_vec.iter_mut() {
..
我正在尝试构建自引用HashMap: use std::collections::HashMap; struct Node { byte: u8, map: HashMap>, } fn main() { let mut network = HashMap::::new(); networ
..
我正在尝试在Rust中实现惰性构造/记忆化评估/缓存习惯. 有一个外部类型,它具有大量数据和访问器方法.访问器方法需要返回一个缓存的计算(如果有的话),或者对其进行计算并将返回值存储在映射中以供以后使用.缓存的值不需要引用外部值,因此不存在循环引用问题;但是它确实需要访问外部值的数据才能构造自身. 这是一个完整的示例,没有通过Rust的借阅检查器: use std::collec
..
有时我有一个struct,其中包含一个包裹在RefCell中的值,我想借用该值,但是我不想使访问器函数的签名依赖于内部实现.为了使其正常工作,我需要将引用以Ref而不是&T的形式返回. 例如,如果这是我的结构: use std::cell::RefCell; pub struct Outer { inner: RefCell, } 我可以这样编写访问器:
..
此问题是由此CodinGame难题提出的。 我正在使用Dijkstra的方法实现基本的寻路算法。它使用边界 HashMap和完成 HashMap来保存与寻路相关的节点信息。在一个特定的循环中,我在边界中找到价值最高的节点,删除该节点,然后将该节点添加到完成 ,并在 boundary 中添加/更新节点的邻居信息。 尝试变异边界在循环时使Rust的借阅检查器变得不容易,但是循环的逻辑对我来
..
我正在尝试在Rust中实现树结构,对其进行遍历并对其进行修改,但是借阅检查器遇到了麻烦。我的设置大致如下: #![feature(slicing_syntax)] use std :: collections :: HashMap; #[deriving(PartialEq,Eq,Hash)] struct Id { id:int,//让我们假装是 } struc
..
我想收集对结构的更改并立即应用所有更改。 基本轮廓如下: 枚举SomeEnum { Foo, Bar, } 结构SomeStruct { attrib:SomeEnum, next_attrib:Option
..
在测试中,我有一个辅助函数,该函数可以在不同配置的对象上运行给定方法,其简化版本如下所示: fn run_method(f:F) 其中 F:Fn(&Foo), { let to_test = vec![0i32]; to_test .iter() .map(| param | { let foo = Foo(* param); f(& foo); }) .f
..
在编译以下代码时: fn main(){ 让mut字段= Vec :: new (); 让pusher =& mut | a:& str | { fields.push(a); }; } 编译器给我以下错误: 错误:借入的数据无法存储在其闭包 之外-> src / main.rs:4:21 | 3 |让pusher =& mut | a:& str
..
我正在尝试使用嵌套迭代器,其中内部迭代器使用外部迭代器的值。 vec![ 0; 10] .iter()。flat_map(|& a | { (0..10).map(| b | { a + b }) }); 错误: a 寿命不足 (0..10).map(| b | { ^^ ^ 注意:引用必须对方法调用有效... 如
..
我的目标是创建一个独立于基础数据结构的功能(特别是泛洪)。我试图通过传递两个闭包来做到这一点:一个用于查询,它不可变地借用一些数据,另一个用于变异,它不可变地借用相同的数据。 示例(在 Rust Playground 上进行了测试): #![feature(nll)] fn foo(n:i32,闭包:& F ,mut_closure:& mut G) 其中 F:F
..
我有一个对象类型 Arc> 我有一个方法应该引用SessionData 的某种方式 fn some_method(session: ...) 我正在使用Rocket(Rust的Web框架),我不能直接调用该方法,因为它是由Rocket调用的.但是,我可以为它提供一个实现,该实现创建一个将传递给处理程序的对象.看起来像这样: impl
..
如果我的取消引用链中存在任何个不可变的引用,则似乎无法对任何内容进行突变.样本: fn main() { let mut x = 42; let y: &mut i32 = &mut x; // first layer let z: &&mut i32 = &y; // second layer **z = 100; // Attempt to change
..
我正在尝试计算合法的象棋移动,并且在满足借阅检查器方面遇到问题.我有一个实现这些方法的结构Chess(用...代替的非重要代码): // internal iterator over (possibly not legal) moves fn get_moves(&self, func: F) where F: Fn(/* ... */), { func(/* ...
..
如何在闭包中调用方法? get_access_token方法可以基于self.get_base_url()设置新的访问令牌: fn fetch_access_token(_base_url: &String) -> String { String::new() } fn get_env_url() -> String { String::new() } pub struc
..
我有一个包含两个字段的结构,我想使用另一个字段(不可变的借用)来修改一个字段(可变的借用),但是从借用检查器中得到了一个错误. 例如,以下代码: struct Struct { field1: Vec, field2: Vec, } fn main() { let mut strct = Struct { field1: v
..
我有以下示例代码,它是其他编程语言中事件驱动的API的标准基础,但是在Rust中,借位检查器会以“一次不能多次借用p1可变"来阻止它: struct Pen { color_cmyk: u32, ink: usize, } impl Pen { pub fn new() -> Pen { Pen { color_cmyk: 0
..
原始问题陈述 我正在尝试编写一个可以从缓存读取和写入的函数,但是我遇到了一个问题,即编译器说我不能一成不变地借用缓存。 我已经阅读过”> https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html , https://naftuli.wtf/2019/03/20/ rust-the-hard-parts /
..