borrow-checker相关内容
为了说明Rc的必要性,the Book提供了以下代码片段(剧透:它不会编译),以说明在没有Rc的情况下无法启用多重所有权。 enum List { Cons(i32, Box), Nil, } use crate::List::{Cons, Nil}; fn main() { let a = Cons(5, Box::new(Cons(10
..
我是铁锈新手。我需要在for循环之前创建一个向量。在上面跑来跑去。更改for循环中的向量。然后更改for循环后的向量。 我尝试了以下代码,并尝试使用不可变的借入,但两者都不起作用。 fn main() { let mut vec1 = vec![4, 5]; vec1.push(6); for i in vec1 { if i % 2 == 0
..
我目前正在构建一个带有主循环的应用程序。设置作为引用添加到结构中以避免装箱。问题是,即使它看起来完全有效,借用检查器也不会验证无限循环。例如,以下代码不能编译: struct Demo { data: Vec, } impl Demo { fn new(data: Vec) -> Self { Demo
..
我希望能够使用 Rust 生成一个子 shell,然后反复向它传递任意命令并处理它们的输出.我在网上找到了很多示例,向我展示了如何传递单个命令并接收其单个输出,但我似乎无法重复执行. 例如,下面的代码挂在注释之后的行.(我想可能 read_to_string() 会阻塞,直到它从子进程接收到标准输出,但如果是这样,我不明白为什么该输出不会出现......) 让 mut child_shel
..
我想使用 Peekable 作为新 cautious_take_while 操作的基础,该操作类似于 IteratorExt 中的 take_whilecode> 但不消耗第一个失败的项目.(还有一个问题是这是否是一个好主意,以及是否有更好的方法来在 Rust 中实现这个目标——我很乐意得到这个方向的提示,但主要是我试图理解我的代码在哪里打破). 我尝试启用的 API 基本上是: 让 mu
..
我最近一直在做我的第一个 Rust 项目,但遇到了障碍.我正在使用 HashMap 将 Strings 映射到 AtomicUsize 整数.HashMap 由 RwLock 保护以允许并发访问.我希望能够在 HashMap 中返回对 AtomicUsize 值的引用,但是如果我尝试在 RwLockWriteGuard 的生命周期之后将这些引用返回给调用者 我收到一个错误,提示 借用值的寿命不够长
..
我正在尝试在 Rust 中实现惰性构造/记忆化评估/缓存习语. 有一个外部类型,它有一堆数据和一个访问器方法.访问器方法需要返回一个缓存的计算(如果有的话)或者计算它并将返回值存储在映射中以供以后使用.缓存值不需要引用外部值,所以不存在循环引用问题;但它确实需要访问外部值的数据才能构建自己. 这是一个没有通过 Rust 借用检查器的完整示例: 使用 std::collections:
..
我想使用 HashMap 来缓存依赖于映射中其他条目的昂贵计算.入口模式只提供对匹配值的可变引用,而不提供对 HashMap 其余部分的引用.我非常感谢有关解决此(不正确)玩具示例的更好方法的反馈: 使用 std::collections::HashMap;使用 std::collections::hash_map::Entry::{Occupied, Vacant};fn 计算(缓存:&mut
..
我有以下示例代码,它是其他编程语言中事件驱动 API 的标准基础,但在 Rust 中,借用检查器通过“不能多次借用 p1 作为可变变量"来阻止它一次": struct Pen {color_cmyk: u32,墨水:使用,}impl 笔 {pub fn new() ->钢笔 {钢笔 {color_cmyk:0x80800000,墨水:20000,}}pub fn write(&mut self,
..
我正在尝试使用 Select crate 抓取网页: let document = Document::from_read(response).unwrap();对于 document.find(Class("lia-list-row")) 中的节点{let title = node.find(Class("page-link")).next().unwrap();让 title_text =
..
我正在尝试计算合法的国际象棋移动,但在满足借位检查器的要求时遇到了问题.我有一个实现这些方法的结构 Chess(非重要代码被 ... 替换): //内部迭代器(可能不合法)移动fn get_moves(&self, func: F)在哪里F: Fn(/* ... */),{func(/* ... */);//移动 1func(/* ... */);//移动 2func(/* ... */);//
..
我想使用 HashMap 来缓存依赖于地图中其他条目的昂贵计算.条目模式仅提供对匹配值的可变引用,而不提供对 HashMap 其余部分的可变引用.我非常感谢有关解决此(不正确)玩具示例的更好方法的反馈: 使用 std::collections::HashMap;使用 std::collections::hash_map::Entry::{Occupied, Vacant};fn计算(缓存:&mu
..
我的目标是创建一个独立于底层数据结构工作的函数(特别是洪水填充).我试图通过传入两个闭包来做到这一点:一个用于查询,它不可变地借用一些数据,另一个用于变异,它可变地借用相同的数据. 示例(在 Rust Playground 上测试)::> #![feature(nll)]fn foo(n: i32, 闭包: &F, mut_closure: &mut G)在哪里F:Fn(i32) ->
..
我有以下代码: pub struct Canvas{宽度:大小,高度:大小,颜色:颜色,表面:表面,质地:质地,渲染器:&'一个渲染器,}impl'a>画布a{pub fn new(width: isize, height: isize, renderer: &'a Renderer) ->画布a{让颜色 = 颜色::RGB(0, 30, 0);让 mut surface = core::cre
..
如何在闭包中调用方法?get_access_token 方法可以根据 self.get_base_url() 设置新的访问令牌: fn fetch_access_token(_base_url: &String) ->细绳 {字符串::新()}fn get_env_url() ->细绳 {字符串::新()}酒吧结构应用{pub base_url:选项,pub access_token:选项,}实
..
我想收集对结构的更改并一次应用它们.基本轮廓如下所示: enum SomeEnum {噗,酒吧,}struct SomeStruct {属性:SomeEnum,next_attrib: Option,}impl SomeStruct {pub fn apply_changes(&mut self) {如果让 Some(se) = self.next_attrib {self.atrib = se
..
我正在编写一个链表来围绕 Rust 的生命周期、所有权和引用.我有以下代码: pub struct LinkedList {head: Option,}pub 结构 LinkedListNode {下一个: Option>,}impl 链表 {pub fn new() ->链表{链表{头:无}}pub fn prepend_value(&mut self) {让 mut new_node = L
..
我正在为借阅检查器苦苦挣扎 - 很奇怪. 虽然我通过添加块找到了解决方案,但我很好奇是否有其他方法可以结束可变借用,以便下一条语句之后可以访问绑定. 这是我目前所做的: let mut canvas: Canvas = Canvas {宽度:5,高度:5,数组:vec!['x';5*5],};{让 mut 渲染器:CanvasRenderer = CanvasRenderer::ne
..
我有一个包含两个字段的结构,我想使用另一个字段(不可变借用)修改一个字段(可变借用),但我从借用检查器收到错误. 例如以下代码: struct 结构 {字段1:Vec i32 ,field2:Vec i32 ,}fn 主(){让 mut strct = 结构 {field1: vec![1, 2, 3],field2: vec![2, 3, 4],};strct.field1.retain
..
我不明白错误不能移出借来的内容.收到很多次了,一直都解决了,但一直不明白为什么. 例如: for line in self.xslg_file.iter() {self.buffer.clear();对于 line.into_bytes().iter() { 中的 current_charself.buffer.push(*current_char as char);}println!(
..