Rust: Format Strings in 1.58
Note: This post is over 5 years old. The information may be outdated.
Bản cập nhật Rust 1.58.0 vừa bổ sung một số tính năng mình thấy khá hay về format string.
Nó cho phép bạn đặt variables bên ngoài scope vào string format bằng cách sử dụng {ident} trong format string.
let x = "world";
println!("Hello {x}!");
// Hello world!
Một ví dụ với debug output:
let items = vec![10, 20, 30];
println!("{items:?}")
// [10, 20, 30]
println!("{items:#?}")
// [
// 10,
// 20,
// 30,
// ]
Bạn cũng có thể format string với minimum width, cú pháp là :[width]
let items = ["these", "words", "are", "different", "sizes"];
let column1 = "item";
let column2 = "iter";
println!("{column1:10}| {column2}");
println!("----------------");
for (i, item) in items.iter().enumerate() {
println!("{item:10}: {i}");
}
// item | iter
// ----------------
// these : 0
// words : 1
// are : 2
// different : 3
// sizes : 4
Canh giữa:
println!("----------------");
for (i, item) in items.iter().enumerate() {
println!("{item:^10}: {i}");
}
// ----------------
// these : 0
// words : 1
// are : 2
// different : 3
// sizes : 4
Canh phải:
println!("----------------");
for (i, item) in items.iter().enumerate() {
println!("{item:>10}: {i}");
}
// ----------------
// these: 0
// words: 1
// are: 2
// different: 3
// sizes: 4
Sử dụng một biến i32 thì chỉ cần đặt $ phía sau variable name.
let spaces = 10;
println!("hello {x:spaces$}!");
// "hello world !"
Điền vào khoảng trống với bất kì ký tự nào
println!("right aligned: hello{x:->7}!");
println!("left aligned: hello{x:-<7}!");
println!("center aligned: hello{x:-^7}!");
// right aligned: hello--world!
// left aligned: helloworld--!
// center aligned: hello-world-!
Để escape dấu ngoặc
println!("Sometimes I need to print {{ or }} too!")
// Sometimes I need to print { or } too!
References
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.