rust语言学习笔记Trait之Default(默认值)

1、常用类型的默认值

rust 复制代码
let a:i32 = Default::default();                     // 0
let b:f32 =Default::default();                      // 0
let c:char=Default::default();                      // ""
let d:bool=Default::default();                      // false
let e:String=Default::default();                    // ""
let f:Vec<i32>=Default::default();                  // []
let g:Vec<String>=Default::default();               // []
let h:HashMap<String,String>=Default::default();    // {}

2、自定义结构体自动派生 Default

rust 复制代码
#[derive(Debug, Default)]
struct Person {
    name: String,
    age: u32,
}

let p = Person::default();
println!("{:?}", p);           // Person { name: "", age: 0 }

3、结构体手动实现 Default

rust 复制代码
#[derive(Debug)]
struct Config {
    host: String,    // 服务器地址
    port: u16,       // 端口
    timeout: u32,    // 超时时间
}

impl Default for Config {
    fn default() -> Self {
        Config {
            host: "localhost".to_string(),
            port: 8080,
            timeout: 100,
        }
    }
}

let config = Config::default();
println!("{:?}", config);       // Config { host: "localhost", port: 8080, timeout: 100 }

4、枚举派生 Default

rust 复制代码
#[derive(Debug, Default)]
enum Color{
    Red,
    #[default]                   // 添加到哪个值前,哪个值就是默认值
    Green,
    Blue,
}

let color = Color::default();
println!("{:?}", color);         // Green

总结

  • 优先使用 #[derive(Default)],除非需要自定义逻辑。
  • API 设计中,为结构体默认实现 Default,提升易用性。
  • 在函数中使用 T::default() 替代 T::new(),增强泛型兼容性。
相关推荐
传奇开心果编程9 小时前
【Rust入门练中学】第2课:变量、可变性与常量
开发语言·学习·rust
rustfs10 小时前
MinIO 国产开源平替正式 GA
分布式·docker·云原生·rust
doiito11 小时前
【Agent Harness】Gliding Horse 最新进化:从“能学习”到“可验证的自主进化”
ai·rust·架构设计·ai agent
边境悍匪11 小时前
蜗牛学苑 Java 智能体学习 Day42|项目周开发技术汇总 1 思维导图复盘
java·开发语言·spring boot·学习·spring
Gyr012 小时前
浅刷了一遍51CTO软考题库客观题及其解析(4)
学习·软考·知识点·信息安全工程师
星栈独行12 小时前
ADK-Rust 是什么?Rust 生态新一代 AI Agent 开发套件
人工智能·后端·rust
是隼人12 小时前
buuctf-pwn [NewStarCTF 2023 公开赛道]stack migration(64位栈迁移)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
ι:12 小时前
单相桥式全控整流仿真从零复现教学
windows·学习·matlab·simulink
CAYA-12 小时前
模电笔记1.1 半导体基础与 PN 结
经验分享·笔记·学习方法
传奇开心果编程13 小时前
【Rust入门练中学】 第3课:数据类型
开发语言·学习·rust