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(),增强泛型兼容性。
相关推荐
sulikey7 小时前
个人Linux操作系统学习笔记6 - 操作系统与进程初识
linux·笔记·学习·操作系统·进程
unicorn318 小时前
学习学习学习
学习
XGeFei8 小时前
【Fastapi学习笔记(3)】——资源的层级关系、安全性-幂等性、Field、工厂函数
笔记·学习·fastapi
星恒随风9 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
暴躁小师兄数据学院11 小时前
【AI大数据工程师特训笔记】第14讲:Linux操作系统与shell脚本
大数据·人工智能·笔记
tedcloud12311 小时前
cc-switch评测:多AI Coding Agent管理工具详解
数据库·人工智能·sql·学习·自动化
土狗TuGou11 小时前
SQL内功笔记 · 第8篇:事务的四大特性与隔离级别
数据库·笔记·后端·sql·mysql·oracle
胡图图不糊涂^_^12 小时前
测试BUG篇
学习·bug·测试
智者知已应修善业12 小时前
【51单片机用T0定时器方式1,实现0.5S的时间间隔实现第一次一个灯亮、第二次二个灯亮,直到全部灯亮,然后重复整个过程】2023-12-29
c++·经验分享·笔记·算法·51单片机
智者知已应修善业12 小时前
【51单片机4位静态数码管显示1234】2023-11-14
c++·经验分享·笔记·算法·51单片机