构造器

说明

Rust语言没有直接提供构造器,通常用关联函数associated functionnew方法创建一个对象:


#![allow(unused)]
fn main() {
/// Time in seconds.
///
/// # Example
///
/// ```
/// let s = Second::new(42);
/// assert_eq!(42, s.value());
/// ```
pub struct Second {
    value: u64
}

impl Second {
    // 创建一个秒实例 Constructs a new instance of [`Second`].
    // 注意这是一个关联函数 - 没有self
    pub fn new(value: u64) -> Self {
        Self { value }
    }

    /// 返回以秒为单位的数值
    pub fn value(&self) -> u64 {
        self.value
    }
}
}

Default

Rust提供了Defaulttrait来实现默认构造函数:


#![allow(unused)]
fn main() {
/// Time in seconds.
///
/// # Example
///
/// ```
/// let s = Second::default();
/// assert_eq!(0, s.value());
/// ```
pub struct Second {
    value: u64
}

impl Second {
    /// 返回以秒为单位的数值
    pub fn value(&self) -> u64 {
        self.value
    }
}

impl Default for Second {
    fn default() -> Self {
        Self { value: 0 }
    }
}
}

如果每个字段都都实现了Default,即可派生得到整个实例的Default


#![allow(unused)]
fn main() {
/// Time in seconds.
///
/// # Example
///
/// ```
/// let s = Second::default();
/// assert_eq!(0, s.value());
/// ```
#[derive(Default)]
pub struct Second {
    value: u64
}

impl Second {
    /// Returns the value in seconds.
    pub fn value(&self) -> u64 {
        self.value
    }
}
}

注意: 当为一个类型实现Default时,既不需要也不建议同时提供一个没有参数的关联函数new

提示: 实现或派生Default后,你的类型可以用于需要Default 实现的地方, 尤其是对 标准库中*or_default函数的支持。

参见