通过例子学 rust 个人精简版 1-2

1-2

显示 (Display)
rust 复制代码
// 动手试一试
use std::fmt;

#[derive(Debug)]
struct Complex {
    real: f64,
    imag: f64,
} impl fmt::Display for Complex {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "{} + {}i", self.real, self.imag)
    }
}
fn main() {
    let complex = Complex {
        real: 3.3,
        imag: -7.2,
    };
    println!("Display: {}", complex);
    println!("Debug: {:?}", complex);
}
bash 复制代码
要点1 :Display fmt(&self, f: &mut fmt::Formatter<'_>)  -> fmt::Result {} 
要点2 :write!:将格式化后的数据写入到 Formatter
要点3 :最后一行不写分号默认为返回值
要点4 :Result 是一种用于错误的枚举类型  操作的结果 -> 成功 或 失败
测试实例: List
rust 复制代码
//动手试一试
use std::fmt; 

struct List(Vec<i32>);

impl fmt::Display for List {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        // 使用元组的下标获取值,并创建一个 `vec` 的引用。
        let vec = &self.0;

        write!(f, "[")?;
        
        for (index, value) in vec.iter().enumerate() {
            if index != 0 {
                write!(f, ", ")?; 
            }
            write!(f, "{}: {}", index, value)?;
        }
        
        write!(f, "]")
    }
}
fn main() {
    let v = List(vec![1, 2, 3]);
    println!("{}", v);
}
rust 复制代码
要点1 : ? 用于传播错误给调用者
要点2 : for (index, value) in vec.iter().enumerate()  是一种常见用法 index 是 usize value 是 &i32
要点3 : 一般描述嵌套类型 例如 元组结构体 最外层的就是最本质的, 名字最后的也是最本质的 
格式化
rust 复制代码
// 动手试一试
use std::fmt::{self, Formatter, Display};

struct Color {
    red: u8,
    green: u8,
    blue: u8,
}
impl Display for Color {
    fn fmt(&self, f: &mut Formatter) -> fmt::Result {
        let hex = format!("{:02X}{:02X}{:02X}", self.red, self.green, self.blue);
        write!(f, "RGB ({}, {}, {}) 0x{}", self.red, self.green, self.blue, hex)
    }
}
fn main() {
    for color in [
        Color { red: 128, green: 255, blue: 90 },
        Color { red: 0, green: 3, blue: 254 },
        Color { red: 0, green: 0, blue: 0 },
    ].iter() {
        println!("{}", *color);
    }
}
bash 复制代码
要点1 : 格式化字符 X 为 大写十六进制数
要点2 : format!() 返回字符串
要点3 : 需要在循环体内 对color 进行解引用
相关推荐
m0_4805026415 小时前
Rust 登堂 之 函数式编程(三)
开发语言·后端·rust
小喷友1 天前
阶段一:入门(理解 Rust 的基本概念)
前端·rust
m0_480502642 天前
Rust 入门 注释和文档之 cargo doc (二十三)
开发语言·后端·rust
盒马盒马2 天前
Rust:变量、常量与数据类型
开发语言·rust
傻啦嘿哟2 天前
Rust爬虫实战:用reqwest+select打造高效网页抓取工具
开发语言·爬虫·rust
咸甜适中3 天前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十四)垂直滚动条
笔记·学习·rust·egui
张志鹏PHP全栈3 天前
Rust第四天,Rust中常见编程概念
后端·rust
咸甜适中3 天前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十五)网格布局
笔记·学习·rust·egui
susnm4 天前
最后的最后
rust·全栈
bruce541105 天前
深入理解 Rust Axum:两种依赖注入模式的实践与对比(二)
rust