通过例子学 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 进行解引用
相关推荐
星栈独行6 小时前
Makepad 应用如何读文件、调接口、保存数据
前端·程序人生·ui·rust·github
guyoung8 小时前
BoxAgnts 工具系统(7)——Skill 模板、Agent 代理与 Cron 调度
rust·agent·ai编程
分布式存储与RustFS10 小时前
基于Rust的国产开源对象存储RustFS:S3 Table对Iceberg数据湖的适配详解
rust·开源·iceberg·对象存储·rustfs·minio平替·s3 table
Jinkxs13 小时前
Rust 性能优化全流程:从 flamegraph 定位瓶颈到 unsafe 与 SIMD 加速,响应快 2 倍
开发语言·性能优化·rust
星栈独行17 小时前
Rust + Makepad 应用怎么打包发布:Windows、macOS、Linux 全平台交付
windows·程序人生·macos·ui·rust
fox_lht1 天前
15.3.改进我们之前的输入、输出项目
开发语言·后端·学习·rust
guyoung1 天前
BoxAgnts 工具系统(6)——多 Provider 适配与 Agent 查询循环
rust·agent·ai编程
星栈1 天前
Rust + Makepad 应用怎么打包发布:Windows、macOS、Linux 全平台交付
前端·rust
MageGojo1 天前
R-Shell开源项目实战解析:用Rust打造命令行SSH工具,支持连接管理、远程执行、SFTP与MCP
运维·rust·开源项目·命令行工具·ssh客户端·mcp
techdashen2 天前
Cargo 1.94 开发周期全解析
开发语言·后端·rust