enumIpAddrKind{V4(u8,u8,u8,u8),V6(String) }lethome= IpAddrKind::V4(127,0,0,1);letloopback= IpAddrKind::V6(String::from("::1")); 可以为枚举实现方法,如下代码: fnmain(){letm=Message::Write(String::from("hello")); m.call();
#[derive(Debug)]// <1>struct File{name:String,data:Vec<u8>,// <2>}fnmain(){letf1=File{name:String::from("f1.txt"),// <3>data:Vec::new(),// <3>};letf1_name=&f1.name;// <4>letf1_length=&f1.data.len();// <5>println!("{:?}",f1);println!("{} is {} bytes...
2、数组(Array) 3、字符串(String) 三、自定义数据类型 1、结构体(Struct) 2、枚举(Enum) 四、其他数据类型 1、切片(Slice) 2、Option类型 3、Result类型 总结 导言 Rust是一种现代的、安全的系统编程语言,注重内存安全和并发性。在Rust中,数据类型是程序中最基本的构建块之一。本篇博客将详细解释Rust的各种...
2、枚举(Enum) 枚举是一种自定义的数据类型,它可以表示多个可能的值。枚举使用enum关键字定义,并可以包含不同的变体(variant)。 以下是一个枚举的示例: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 enum Fruit { Apple, Banana, Orange, } fn main() { let fruit: Fruit = Fruit::Apple; match ...
enum 和使用enum作为字段的struct,都需要实现对应的trait: #![allow(dead_code)] use std::fmt::Display; #[derive(Debug)] enum FileState { Open, Closed, } #[derive(Debug)] struct File { name: String, data: Vec<u8>, state: FileState, } impl File { fn new(name: &str) -> File { ...
在Rust 中,enum是一种非常强大的类型,它允许定义一组具有关联性的可能值。与许多编程语言中的枚举不同,Rust 的枚举不仅可以是简单的枚举值,还可以包含数据,甚至可以和结构体一样复杂。 以下是对enum的全面学习和总结: 1. 基本枚举 枚举的基本形式是定义一组可能的值: ...
#[derive(Debug)] enum Color { // 定义色值,参数分别表示16进制颜色代码,R,G,B White(String, u8, u8, u8), Red, Black { code: String, r: u8, g: u8, b: u8 }, } fn main() { let white = Color::White(String::from("#FFFFFF"), 255, 255, 255); let red = Color::Red; let...
enum Data { Empty, Number(i32), Array(Vec<i32>), } Empty变体不存储任何其它数据,Number变体中有一个 i32,Array变体保存了一个元素类型为 i32 的 Vec。首先来看一下Array变体的内存布局: 首先是一个整数标记,这里就是 2 。然后是三个 usize 用来存储 Vec 。编译器还将添加一些 padding 以满足内存对齐。
接下来让我们来看下String, str 和&str的内存分布。以一个例子开始吧。 lets1:String=String::from(“HELLO”); lets2: &str = “ЗдP”;// д -> Russian Language lets3: &str = &s1[1..3]; 首先,s1是一个String,String实质上就是Vec的一个包装,其中也是在栈上有一个指针 + cap( 1 machin...
通过将数据直接放入每个枚举变量中,我们可以仅使用枚举而不是结构内部的枚举以更简洁的方式表示相同的概念。 IpAddr枚举的新定义表明,V4和V6变体都将具有关联的String值: fn main() { #[derive(Debug)] enum IpAddr { V4(String), V6(String), }