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(),增强泛型兼容性。