rust相关内容
我正在学习 Rust,最近进行了一项练习,我必须遍历可能朝任一方向发展的数字.我尝试了以下方法,结果出乎意料. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]结构点{x: i32,是:i32}fn 测试(){让 p1 = 点 { x: 1, y: 8 };让 p2 = 点 { x: 3, y: 6 };让 all_x = p1.x..=p2.
..
..
..
我有一个名为 Frame 的基本结构,它对大量计算很有用:. pub struct Frame;{grid_val: Vec,grid_space: Vec Frame 可以用来描述最基本的计算,但有时会出现更复杂的问题,我需要添加更多的几何信息.所以我对每个几何图形都使用了合成: pub struct Sphere{网格:框架,半径:T}pub struct 双曲线{to
..
我正在尝试实现一个“多态"Input 枚举,它隐藏了我们是从文件读取还是从标准输入读取.更具体地说,我正在尝试构建一个具有 lines 方法的枚举,该方法将依次“委托"调用包装到 BufReader 中的 File 或 StdInLock (两者都有 lines() 方法). 这是枚举: 枚举输入{控制台(std::io::StdinLock),文件(std::io::Bu
..
使用枚举Axes来限定Coordinate和Quaternion: #[派生(克隆)]酒吧枚举轴{协调 {×:f64,是:f64,z: f64,保留:Vec,},四元数 {×:f64,是:f64,z: f64,},}实现轴{pub fn shift(&mut self, Sample: &Axes) ->() {let Dup: Axes = self.clone();匹配 Dup {Axes:
..
我在尝试为结构创建通用向量时遇到了问题.这是我的第一次尝试: #[derive(Serialize)]结构卡{部分:Vec>}#[派生(序列化)]struct Section{标头:字符串,小部件:Vec} 这给我带来了一个错误,即 Sized 未实现并且 WidgetTrait 大小在编译时未知. 我的下一个尝试是像这样使用 Box
..
我无法理解盒装特征的值是如何产生的.考虑以下代码: trait Fooer {fn foo(&self);}i32 的 impl Fooer {fn foo(&self) { println!("Fooer on i32!");}}fn 主要() {让 a = Box::new(32);//工作,创建一个 Box让 b = Box::::new(32);//工作,创建一个 B
..
鉴于 foo 的这个定义: 让 foo = vec![vec![1, 2, 3], vec![4, 5, 6], vec![7, 8, 9]]; 我希望能够编写这样的代码: 让结果:Vec;= foo.iter().枚举().flat_map(|(i, row)| if i % 2 == 0 {row.iter().map(|x| x * 2)} 别的 {std::iter::empty()
..
我正在尝试在 Rust 中实例化一个数组.这是我可以在运行时执行此操作的一种方法: 让 mut t = [0_u32;65];对于我在 0..t.len() {t[i] = ((i as f64).sin().abs() * 2.0_f64.powf(32.0)).floor() as u32;} 但是,由于我永远不会更改这个数组的值,而且我会经常使用这些值,所以我认为这可能是一个很好的机会来
..
文档 const: 常量在程序的整个生命周期中都存在.更具体地说,Rust 中的常量在内存中没有固定地址.这是因为它们有效地内联到使用它们的每个地方.因此,对相同常量的引用不一定保证引用相同的内存地址. 我只见过 C++ 中的“内联函数",但从未见过内联常量值.什么是对它如何工作的初学者友好的解释? 我也对“内存中没有固定地址"感到困惑.这是否意味着每次我们使用 const 值时
..
我了解到,如果一个变量没有使用 mut 显式声明为可变的,它就会变成不可变的(声明后不能更改).那么为什么我们在 Rust 中有 const 关键字呢?他们不一样吗?如果不是,它们有何不同? 解决方案 const,在Rust中,是constant的缩写,与compile-time有关评价.它出现了: 声明常量时:const FOO: usize = 3; 在声明编译时可评估函数时:
..
我希望能够使用 Rust 生成一个子 shell,然后反复向它传递任意命令并处理它们的输出.我在网上找到了很多示例,向我展示了如何传递单个命令并接收其单个输出,但我似乎无法重复执行. 例如,下面的代码挂在注释之后的行.(我想可能 read_to_string() 会阻塞,直到它从子进程接收到标准输出,但如果是这样,我不明白为什么该输出不会出现......) 让 mut child_shel
..
std::sync::atomic::AtomicBool 的所有方法 采用我以前没有使用过的内存排序(Relaxed、Release、Acquire、AcqRel 和 SeqCst).在什么情况下应该使用这些值?该文档使用了我不太了解的令人困惑的“加载"和“存储"术语.例如: 生产者线程改变由 Mutex 持有的一些状态a>,然后调用 AtomicBool::compare_and_swa
..
我正在使用 UDP 创建服务器/客户端范例,但 Rust 服务器没有接收 C++ 客户端消息.我已经能够成功地进行 Rust 服务器/Rust 客户端和 C++ 服务器/Rust 客户端通信. 这让我相信我的 C++ 代码存在问题,或者在将 C++ 缓冲区发送到 Rust 时存在某种类型的错误通信,但我使用了我认为有效的代码.这只是从同一台计算机发送和发送到同一台计算机,尚未扩展到计算机到计
..
编者注:此代码示例来自 Rust 1.0 之前的版本,不是有效的 Rust 1.0 代码.问题中讨论的概念仍然有效. 我正在尝试使用 Rust 进行 torrent 抓取.我可以在 Wireshark 中看到传入的包,但我的 recv_from 调用总是返回 Error("End of file").这是我的程序: 使用 std::io::net::ip::{Ipv4Addr, Socke
..
您将如何创建一个堆栈分配的类似矢量的容器,它可以包含的元素数量具有固定的上限?你可以在下面看到我的尝试,但它没有编译: //以下是 crate 级别#![特征(unsafe_destructor)]使用标准::内存;使用标准::ptr;使用 std::slice::Iter;pub struct StackVec{缓冲区:[T;10],len:使用大小,}实现StackVec{
..
我有一个有两个变体的枚举: 枚举数据库类型 {记忆,RocksDB,} 为了在检查参数是 DatabaseType::Memory 还是 DatabaseType::RocksDB 的函数中设置条件 if,我需要什么? fn 初始化(数据存储:DatabaseType)->结果{如果/* 内存 */{//.......} else if/* RocksDB */{//.......
..
我有一些变量通过引用传递到我的函数中.我不需要改变它或转移所有权,我只看它的内容.如果内容处于某种状态,我想将值替换为默认值. 例如,我的函数接受 &Vec,如果 Vec 为空,则将其替换为 vec!["empty";]: fn accept(mut vec: &Vec) {如果 vec.len() == 0 {vec = &vec!["empty".to_string()
..
我正在写一个新的板条箱.我为它编写了一些测试并使用 cargo test 运行测试.之后,在 target 文件夹中生成了一些 test_xxx 可执行文件.我在 Cargo.toml 中启用了调试选项.通过运行 gdb targets/test_xxx,我可以列出和调试 test_xxx 可执行文件中的代码.但是,我无法进入板条箱中的功能.没有调试信息.如何构建/链接 crate 以包含其调试信
..