Rust 构造器

创建对象

rust语言中struct没O有构造器。所以一般使用关联函数new创建一个对象

pub struct User {
    id: u32,
    pub username: String,
    pub role: Role,
}

impl User {
  pub fn new(username: String) -> Self {
    Self {
      id: thread_rng().gen_range(0..9999999),
      username,
      role: Role::Creator
    }
  }
}

默认构造器

如果struct中所有字段都支持Defaulttrait,则可以通过#[derive(Default)]实现默认构造器。

#[derive(Default)]
pub struct Post {
    content: String,
    tags: Vec<String>,
    likes: u32
}

let post1 = Post::default();

实现Default的好处是可以用于标准库任何使用*or_default函数

let result: Result<Post, String> = Err("error".to_owned());
let post3 = result.unwrap_or_default();

derive-new

使用derive-new创建了一个new构造器,并且可设置默认初始值。

use derive_new::new;

#[derive(new)]
pub struct Post {
    content: String,
    #[new(value = "vec![\"rusty\".to_owned()]")] 
    tags: Vec<String>,
    #[new(default)]
    likes: u32
}

参考

posted @ 2022-04-07 15:37  杨琼  阅读(95)  评论(0编辑  收藏  举报