Rust没有构造器作为语言构造。
相反,惯例是使用一个关联函数new
来创建一个对象:
/// 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`].
// Note this is an associated function - no self.
pub fn new(value: u64) -> Self {
Self { value }
}
/// Returns the value in seconds.
pub fn value(&self) -> u64 {
self.value
}
}
Rust通过Default
trait支持默认构造器:
/// Time in seconds.
///
/// # Example
///
/// ```
/// let s = Second::default();
/// assert_eq!(0, s.value());
/// ```
pub struct Second {
value: u64
}
impl Second {
/// Returns the value in seconds.
pub fn value(&self) -> u64 {
self.value
}
}
impl Default for Second {
fn default() -> Self {
Self { value: 0 }
}
}
如果所有类型的所有字段都实现了Default
,也可以派生出Default
,就像对Second
那样:
/// 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
函数。
-
default 惯常做法对
Default
trait更深入的描述。 -
生成器模式用于构建有多种配置的对象。
Latest commit fa8e722 on 22 Nov 2021