rust 相关问题

Rust是一种用于以简单方式编写高度可靠和快速软件的语言。它可用于从高级代码到特定于硬件的代码,从大型熨斗到小型设备。

追踪,如何针对`Layer`过滤指定级别下的日志?

考虑以下代码,我将日志写入标准输出和文件中。这是通过Layer来实现的,但我不知道如何根据级别进行过滤。 pub fn trace() ->tracing_ap...

回答 1 投票 0

使用`std::sync::Barrier`时如何选择线程领导者?

我正在学习 Rust 中的 std::sync::Barrier。 根据 wait() 方法的文档: pub fn wait(&self) -> BarrierWaitResult (剪断) 所有线程都完成后,屏障可重复使用

回答 1 投票 0

使用`RefCell<T>`时出现奇怪的编译时借用错误

我正在使用ratatui库来使用rustc 1.77.2制作一个程序。 我有以下代码: self.terminal().draw(|frame| self.render_frame(frame))?; 其中terminal()是结构体的getter

回答 1 投票 0

循环链表定义

我正在尝试在 Rust 中创建一个循环链表定义,并提出了以下实现: pub 结构 ListNode { 酒吧值:i32, 酒吧下一个:选项 我正在尝试在 Rust 中创建一个循环链表定义,并提出了以下实现: pub struct ListNode { pub val: i32, pub next: Option<Rc<RefCell<ListNode>>>, } impl ListNode { pub fn new(val: i32) -> Self { ListNode { next: None, val } } pub fn for_each<F>(&self, f: F) -> () where F: Fn(i32), { f(self.val); while let Some(next) = &self.next { f(next.borrow_mut().val); } } } 问题是运行以下代码时出现紧急错误:already borrowed: BorrowMutError fn main() { let lst = Rc::new(RefCell::new(ListNode::new(10))); let mut ref_mt = lst.borrow_mut(); ref_mt.next = Some(lst.clone()); lst.clone().borrow_mut().for_each(|val| println!("{}", val)) } 有没有办法修复代码,使其与 RefCell 一起工作,或者 RefCell 本质上不适合这种情况? 在(安全)Rust 程序中,数据最多可以有一个可变引用,该引用由“所有权规则”控制并由“借用检查器”强制执行。用 Rc 包装类型不会改变 here 所讨论的情况,这也是使用 RefCell 的原因。它使用“内部可变性”来允许表面上看起来像多个可变引用。然而,正如here所讨论的,相同的规则适用,它们只是“动态”检查(即在运行时,而不是在编译时)。这就是你在这里遇到的问题。曾经有一个时间点违反了“别名 XOR 可变性”规则。让我们看看哪里出了问题。 首先,当尝试调用 ref_mt(可变借用 2)时,for_each 仍在范围内(可变借用 1)。让我们通过显式删除 ref_mt 来解决这个问题。let mut ref_mt = lst.borrow_mut(); ref_mt.next = Some(lst.clone()); drop(ref_mt); lst.clone().borrow_mut().for_each(|val| println!("{}", val)) 进行此更改后,至少会打印一次“10”。接下来,在尝试迭代时该节点仍保持借用状态,迭代本身将尝试借用同一节点。让我们通过避免不必要的借用来解决这个问题。 lst.clone().borrow().for_each(|val| println!("{}", val)) 接下来,我们在无限迭代中遇到同样的问题。让我们以同样的方式解决这个问题。 f(next.borrow().val); 最后,循环开始工作,只要您允许,程序就会继续循环打印“10”。 修改后的代码完整版: use std::{cell::RefCell, rc::Rc}; pub struct ListNode { pub val: i32, pub next: Option<Rc<RefCell<ListNode>>>, } impl ListNode { pub fn new(val: i32) -> Self { ListNode { next: None, val } } pub fn for_each<F>(&self, f: F) -> () where F: Fn(i32), { f(self.val); while let Some(next) = &self.next { f(next.borrow().val); } } } fn main() { let lst = Rc::new(RefCell::new(ListNode::new(10))); let mut ref_mt = lst.borrow_mut(); ref_mt.next = Some(lst.clone()); drop(ref_mt); lst.clone().borrow().for_each(|val| println!("{}", val)) }

回答 1 投票 0

Rust 1.0 中如何读取用户输入的整数?

我找到的现有答案都是基于from_str(例如有效地从控制台读取用户输入一次),但显然from_str(x)在Rust 1.0中已更改为x.parse()。作为一个新手,...

回答 9 投票 0

如何让 Cargo 自动安装版本适合所需 rustc 的依赖项?

我需要构建这个https://github.com/yaoxin1995/Trusted_Client/tree/main 每晚使用 Rust 版本 1.65。但是,它不断通知有关依赖项版本和依赖项的错误...

回答 1 投票 0

“as”运算符如何将枚举转换为整数?

我正在为我的一个项目创建一个 Bit 枚举,并且我经历了与 as u32 (或任何其他类型)语法的一些奇怪的交互。我已经为我的 Bit 枚举实现了 Into ...

回答 1 投票 0

有什么方法可以不显示非蛇形标识符的警告吗?

我正在用 Rust 编写第一个测试,我发现: 警告:函数 testCall 应该有蛇形命名,例如 test_call, #[warn(non_snake_case)] 默认开启 经过搜索,我发现...

回答 2 投票 0

第二生命周期省略规则

Rust 书籍提供了以下代码来说明需要显式生命周期的有效函数定义: fn 最长<'a>(x: &'a str, y: &'a str) -> &'a str { ...

回答 1 投票 0

在流上使用移动值后如何使用它

async fn 套接字(mut ws:WebSocket,状态:用户){ tokio::spawn(异步移动 { while let Some(msg) = reader.recv().await{ println!("给用户的消息:{:?}", msg); ws.send(msg).

回答 1 投票 0

如何为函数内创建的数组返回切片(以干净的 Rust 方式)

这个问题可能已经被问过很多次了,抱歉。 我想创建一个创建字节数组并向其返回切片的函数,并且仅使用生命周期。 我不在乎如何...

回答 1 投票 0

Rust - Syn 和 Quote

我正在尝试学习 syn 和 quote 库是如何工作的,以及基本上如何完成解析和代码生成。因此,我编写了一个简单的宏来将 Rust 函数转换为 .json 模式。宏已给出

回答 1 投票 0

在 Rust 的 Rocket 中,为什么我可以从请求守卫复制状态,但通过 Rocket::state 检索状态时却不能?

这个路由,只是在Redis中设置一个key-value,就可以编译并成功运行: #[post("/thing", data = "")] ...

回答 1 投票 0

actix_web 提供的标头无效

我在运行基于 actix-web 的服务器时遇到此错误 错误 actix_http::h1::dispatcher] 流错误:请求解析错误:提供的标头无效 处理程序代码是这样的: #[导出(序列化,

回答 2 投票 0

不同歌曲的同一个来源

我正在开发一个客户端-服务器应用程序,它将数据以块的形式从服务器发送到每个客户端。反过来,客户端接受该数据并立即将其传递给 rodio 进行播放。但是当...

回答 1 投票 0

如何定义一个 Rust 函数来使用一个拥有的 String 并返回一个拥有的 Split?

我想从标准输入读取一行,然后用空格分割它并处理这些部分。 一个简单的 read_line 可以工作,因为它返回一个拥有的字符串: fn read_line() -> 字符串 { 让 mut str:

回答 1 投票 0

Rust Bazel 项目中的可选依赖项

我正在开始使用 Rust 的 Bazel 项目,没有 Cargo。我正在尝试设置一个功能门控的可选依赖项。 我设置了 crates_vendor: 板条箱供应商( 名称=“crates_io&q...

回答 1 投票 0

我无法从 Rust 中的串联字节字符串中获取原始字节

我已将文件转换为字节并有一个 vec/array [68, 114, 97, 109, 97, 116, 105, 99, 32, 115, 97, 120, 97, 112, 104, 111, 110, 101, 32, 112, 108, 97, 121, 115, 32 , 73, 78, 32, 84, 72, 69, ...

回答 1 投票 0

此代码有错误。我知道这可以通过“命名生命周期参数”来解决,但我想知道为什么这个特定代码会抛出错误?

fn main() { 让 strings = vec![String::from("hello")]; 让默认= String::from(“默认”); 让 s = first_or(&strings, &default); println!("{}&quo...

回答 1 投票 0

如何从两个相同长度的 Vec<[f64; 2]> 创建 Vec<f64>?

如果我有两个相同长度的不同Vec,我如何“压缩”它们以获得Vec<[f64; 2]>而不是Vec<(f64, f64)>? 这是我到目前为止所拥有的: 让 vec1: ...

回答 1 投票 0

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