Constructor
Rust không có constructors, thay vào đó có một convention là sử dụng new
method (Associated Functions) để tạo một instance mới của struct hoặc enum.
struct Point { x: i32, y: i32, } impl Point { fn new(x: i32, y: i32) -> Point { Point { x, y } } } fn main() { let point = Point::new(1, 2); println!("({}, {})", point.x, point.y); }
The Default Trait (Default Constructors)
Rust hỗ trợ default constructor thông qua Default trait.
struct Point { x: i32, y: i32, } impl Default for Point { fn default() -> Self { Point { x: 0, y: 0 } } } fn main() { let point = Point::default(); println!("({}, {})", point.x, point.y); }
Default
còn có thể sử dụng như một derive nếu tất cả các field của struct implement Default
.
#[derive(Default)] struct Point { x: i32, y: i32, } fn main() { let point = Point::default(); println!("({}, {})", point.x, point.y); }
Thường với một struct cơ bản chúng ta thường sẽ phải cần cả new
và Default
method.
Một ưu điểm của Default
là struct hoặc enum của chúng ta có thể được sử dụng một cách
generic trong các trường hợp như dưới đây hoặc cho tất cả các *or_default()
functions
trong standard library.
#![allow(unused)] fn main() { fn create<T: Default>() -> T { T::default() } }