rust 相关问题

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

Rust、Tauri:为什么 tauri 会修改调用函数的组合参数名称?

我使用 Tauri 构建 GUI。 在我的后端,我定义了两个将在前端调用的函数: #[tauri::命令] fn 功能测试(消息:字符串){ println!("已收到:{}",女士...

回答 1 投票 0

类型 <T><T> 的特征 From

我有3个箱子。 具有特征定义的特征定义: 酒吧特质测试{ 输入执行; } 下面是类型特征的第一次实现 pub 结构首先; pub 结构第一参数;

回答 1 投票 0

如何确保泛型参数类型不同?

我定义了一个特征(我们称之为 MyTrait),并为任何类型的具有两个元素的元组实现了它: 特征我的特征{ fn my_fn(); } impl MyTrait for (T1, T2) { fn my_fn() {....

回答 1 投票 0

如何在 Rust 中操作可变结构的实例 - 所有权问题

我刚刚学习 Rust,已经学习了多年的 C++,并且在理解如何处理一些所有权限制方面遇到了一些困难。具体来说,在这个小程序中,就是...

回答 2 投票 0

将牛场结构转换为拥有结构的便捷方法

我有一个定义如下的结构 结构 Foo<'a> { 字段1:&'a str, 字段2:&'a str, 字段3:&'a u8, // ... } 我用它来从 mmapped 返回解析结果...

回答 2 投票 0

使用 rust 在 url 中添加空格来打破日期和时间

我正在尝试使用 urlencoding 来解码 url 日期时间,如下所示: fn 主() { 让结果 = urlencoding::decode("gmt_create=2024-05-05+11%3A14%3A19"); 打印!(“{}&qu...

回答 1 投票 0

存储 Fn 闭包的返回值

如果将 &dyn Fn(&mut [u8]) 更改为 &dyn FnOnce(&mut [u8]),则下面的代码有效,因为这样 f 就可以安全地移动。然而,我真的无法使它成为 FnOnce 因为进一步我发现了一些

回答 2 投票 0

在 Rust 中转换非原始类型

我对 Rust 很陌生,如果这是一个简单的问题,我很抱歉! 我有以下简化场景,其中有一个特征和两个实现该特征的结构类型(TypeA 和 TypeB)。我...

回答 1 投票 0

rust 匹配访问子变体字段

tl;dr 在带有子变量的枚举的匹配语句中,如何将该子变量分配给变量? 鉴于这些枚举 枚举 MySubVariant { A, 乙, C, } 枚举 MyEnum { X {变量...

回答 1 投票 0

WebDriver 等三十四? (铁锈硒)

在 Python 和 Java 的 Selenium 中,可以等待 URL 更改为特定值。三十四号箱子里的锈也有类似的功能吗? Java 示例: 新的 WebDriverWait(驱动...

回答 1 投票 0

如何在 crates.io 中对另一个 crate 使用相同的包名称?

我想接管已经部署在 crates.io 中的不再维护的开源 Rust 包。 虽然在

回答 1 投票 0

如何在 Actix-Web 中返回已配置的应用程序?

我正在使用 actix-web 创建一个嵌入了状态/数据的 httpserver。但是 vscode 告诉我 create_app 函数在其返回值类型定义 App 中具有错误的参数...

回答 3 投票 0

如何使用默认值压缩两个长度不等的迭代器?

我正在尝试压缩两个长度不等的迭代器,它仅在两个迭代器都有值时才返回,并忽略最长迭代器中的其余部分。 fn 主() { 让 num1 = vec![1, 2]; 让 num...

回答 6 投票 0

在宏中生成文档

在定义某些形式的元组结构时,我有几个宏来减少样板: 宏规则! new_type (($name:ident, $bytes:expr) => ( pub struct $name(pub [u8; $bytes]); ...

回答 2 投票 0

追踪,如何针对`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

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