Rust: Struct
Note: This post is over 5 years old. The information may be outdated.
Struct được sử dụng trong Rust rất nhiều, hầu như là mọi lúc. Với struct ta có thể định nghĩa một kiểu dữ liệu riêng.
Tên của struct thường là UpperCamelCase. Nếu bạn định nghĩa tên struct là lowercase, compiler sẽ nhắc nhở ngay.
warning: type `duyet_struct` should have an upper camel case name
--> src/main.rs:1:8
|
1 | struct duyet_struct;
| ^^^^^^^^^^^^ help: convert the identifier to upper camel case: `DuyetStruct`
|
= note: `#[warn(non_camel_case_types)]` on by default
Có 3 loại struct:
Unit struct
Unit struct là một struct mà không có gì cả:
struct FileDirectory;
fn main() {}
Tuple struct
Tuple struct hay còn gọi là Unnamed struct. Bạn chỉ cần định nghĩa kiểu dữ liệu, không cần định tên field name.
struct Colour(u8, u8, u8);
fn main() {
let my_colour = Colour(50, 0, 50); // Make a colour out of RGB (red, green, blue)
println!("The first part of the colour is: {}", my_colour.0);
println!("The second part of the colour is: {}", my_colour.1);
}
// The first part of the colour is: 50
// The second part of the colour is: 0
Named struct
Phổ biến nhất, bạn sẽ phải định nghĩa field name trong block {}
struct Colour(u8, u8, u8); // Declare the same Colour tuple struct
struct SizeAndColour {
size: u32,
colour: Colour, // And we put it in our new named struct
// The last comma is optional, but recommended
}
fn main() {
let colour = Colour(50, 0, 50);
let size_and_colour = SizeAndColour {
size: 150,
colour: colour
};
}
colour: colour có thể được viết gọn lại thành:
let size_and_colour = SizeAndColour {
size: 150,
colour
};
Xem tiếp về Trait.
Related Posts
Rust: indoc
indoc là một crate nhỏ nhưng hữu ích giúp canh lề (indented documents). indoc!() macro nhận multiline string và un-indents lúc compile time, xoá tất cả khoảng trắng đầu tiên trên cách dòng dựa theo dòng đầu tiên.
Rust: Rayon - A data parallelism library for Rust
rayon là thư viện data-parallelism cho Rust, gọn nhẹ và dễ dàng convert từ code tính toán tuần tự sang song song mà vẫn đảm bảo không lỗi data-race.
Rust: Box
Tất cả giá trị trên Rust mặc định đều được allocated trên stack. Giá trị có thể được boxed, allocated trên heap bằng cách sử dụng Box<T>. Box<T> là một smart pointer của Rust cho phép allocated trên heap giá trị có kiểu T, còn pointer trỏ đến giá trị đó sẽ nằm trên stack.
Rust Design Pattern: Builder Pattern
Builder được sử dụng cực kỳ phổ biến trong Rust so với các ngôn ngữ khác, bởi vì Rust không có overloading.