Default 特性

说明

许多Rust中的类型有一个构造器。然而,构造器是针对特定类型的。Rust不能抽象出一个代表所有带有new()方法的东西。为了实现这个想法, 一个可被容器和其他泛型使用的Default特性应运而生(如 [Option::unwrap_or_default())。尤其是一些容器已经在适当的情况下实现了它。

单例容器如 Cow, BoxArcDefault类型实现了Default, 并且可以自动地对每个成员都实现Default的结构体支持#[derive(Default)]。所以越多的类型支持 Default,它就会越有用。

另一方面,构造器能够接受多个参数,而default()方法不能。你甚至可以定义多个不同的函数做多个构造器,但是你最多只能为一个类型实现一种Default的实现。

例子

  1. use std::{path::PathBuf, time::Duration};
  2. // 注意我们可以用自动导出 Default.
  3. #[derive(Default, Debug)]
  4. struct MyConfiguration {
  5. // Option defaults to None
  6. output: Option<PathBuf>,
  7. // Vecs default to empty vector
  8. search_path: Vec<PathBuf>,
  9. // Duration defaults to zero time
  10. timeout: Duration,
  11. // bool defaults to false
  12. check: bool,
  13. }
  14. impl MyConfiguration {
  15. // add setters here
  16. }
  17. fn main() {
  18. // construct a new instance with default values
  19. let mut conf = MyConfiguration::default();
  20. // do something with conf here
  21. conf.check = true;
  22. println!("conf = {:#?}", conf);
  23. }

参阅