address: String::from("::1"), }; 但,rust 可以简化类型的定义: enum IpAddr { V4(String), V6(String), } let home = IpAddr::V4(String::from("127.0.0.1")); let loopback = IpAddr::V6(String::from("::1")); Where structs give you a way of grouping together related fields and ...
在Rust 中,enum是一种非常强大的类型,它允许定义一组具有关联性的可能值。与许多编程语言中的枚举不同,Rust 的枚举不仅可以是简单的枚举值,还可以包含数据,甚至可以和结构体一样复杂。 以下是对enum的全面学习和总结: 1. 基本枚举 枚举的基本形式是定义一组可能的值: enumDirection{ North, South, East, West,...
fn main() { let message: String = String::from("Hello, Rust!"); println!("Message: {}", message); } 三、自定义数据类型 Rust允许用户自定义数据类型,包括结构体和枚举。 1、结构体(Struct) 结构体是一种自定义的数据类型,它可以将多个不同类型的值组合在一起形成一个新的类型。结构体使用struct...
enum Data { Empty, Number(i32), Array(Vec<i32>), } Empty变体不存储任何其它数据,Number变体中有一个 i32,Array变体保存了一个元素类型为 i32 的 Vec。首先来看一下Array变体的内存布局: 首先是一个整数标记,这里就是 2 。然后是三个 usize 用来存储 Vec 。编译器还将添加一些 padding 以满足内存对齐。
两次调用to_string分别创建“hello”、“world” String;(self_8以及v8,注意!这里由于RVO,函数使用第一个参数传递返回值) 使用vec存储两个String。 可以看到整体的代码变得可读性不是很高,出现了与源代码有很多出入的部分,例如std::catch_unwind、<alloc::vec::Vec<TA>,_as_core::fmt::Debug>::fmt等,这部分...
enum IpAddr { V4(String), V6(String), } let home = IpAddr::V4(String::from("127.0.0.1")); let loopback = IpAddr::V6(String::from("::1")); println!("{:?}", home); println!("{:?}", loopback); } cargo run Finished dev [unoptimized + debuginfo] target(s) in 0.63s ...
3、字符串(String) 三、自定义数据类型 1、结构体(Struct) 2、枚举(Enum) 四、其他数据类型 1、切片(Slice) 2、Option类型 3、Result类型 总结 导言 Rust是一种现代的、安全的系统编程语言,注重内存安全和并发性。在Rust中,数据类型是程序中最基本的构建块之一。本篇博客将详细解释Rust的各种数据类型,并提供相...
enum State { State1, State2, StateN } /// 不再是【泛型类型】了 struct Type1 { com_field0: String, state: State // 状态字段 } impl Type1 { fn operate1(&mut self) { // 1. 防御性·判断 // 2. 真正的业务逻辑代码 } }
to_string(); Ok(date) } 注意到我们使用了map_err将一个错误类型转换为另外的错误类型. 但是可以看到太多的verbose作为结果,我们的函数充斥着太多map_err调用。我们可以实现From trait,这样就会完成自动错误类型转换。 // error.rs use std::fmt; #[derive(Debug)] pub enum MyCustomError ...
rust中的enum可不止这点功能,我们来看一个例子 enumIpAddrKind{V4,V6,}structIpAddr{kind:IpAddrKind,address:String,}lethome=IpAddr{kind:IpAddrKind::V4,address:String::from("127.0.0.1"),};letloopback=IpAddr{kind:IpAddrKind::V6,address:String::from("::1"),}; 我们定义了一个枚举和一个结...