Rust: Formatted print
TIL
765
Rust
28
White

Giang Nguyen viết ngày 19/09/2016

alt text

Dùng macro println

Ví dụ

fn main() {
    let title = "Kipa";
    println!("{}log", title);
}

Chúng ta có thể đưa trực tiếp biến title vào trong macro println

fn main() {
    println!("{title}log", title="Kipa");
}

Lazy print for debug

Chúng ta có thể dùng macro println để debug 1 struct trong Rust

fn main() {
    let vectos = vec![1, 2, 3, 4];
    println!("{:?}", vectors);
}

Output => [1, 2, 3, 4]

Format {:?} dùng cho traitDebug

Tuy nhiên format {:?} chỉ dùng được cho những struct implement trait Debug

impl Debug<T> for Vec<T>

Nếu những stuct còn lại muốn áp dùng được dạng println thì phải làm thao, đơn giản nhất là thêm derive(Debug) trước struct đó

#[dervie(Debug)]
struct Point {
    x: i32,
    y: i32,
  }
fn main() {
    let point = Point { x: 6, y: 9 };
    println!("{:?}", point);
 }

 Output => Point { x: 6, y: 9 }

Nếu không muốn dùng derive(Debug) chúng ta có thể implement trait Debug

use std::fmt::{Debug, Formatter, Result};
struct Point {
    x: i32,
    y: i32
}

impl Debug for Point {
 fn fmt(&self, f: &mut Formatter) -> Result {
    write!(f, "CustomPoint {{ x: {}, y: {} }}", self.x, self.y)
 }
}

fn main() {
    let point = Point { x: 6, y: 9 };
    println!("{:?}", point);
 }

 Output => CustomPoint { x: 6, y: 9 }

Lưu ý: hàm fmt chúng ta cần trả về giá trị nên không có ; đối với macro write.

Vậy struct Point ở trên khi ta dùng println! bình thường nó sẽ như thế nào ?

struct Point {
    x: i32,
    y: i32
}

fn main() {
    let point = Point { x: 10, y: 10 };
    println!("{}", point);
 }

 Output => error: the trait bound `Point: std::fmt::Display` is not satisfied

Điều này có nghĩa là chúng ta cần implement trait Display cho struct Point

use std::fmt::{Debug, Display, Formatter, Result};
struct Point {
    x: i32,
    y: i32
}

impl Debug for Point {
 fn fmt(&self, f: &mut Formatter) -> Result {
    write!(f, "CustomPoint {{ x: {}, y: {} }}", self.x, self.y)
 }
}

// Implement trait Display for Point

impl Display for Point {
    fn fmt(&self, f: &mut Formatter) -> Result {
     write!(f, "DisplayPoint {{ x: {}, y: {} }}", self.x, self.y)
   }
}

fn main() {
    let point = Point { x: 6, y: 9 };
    println!("{}", point);
 }

 Output => DisplayPoint { x: 6, y: 9 }

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Giang Nguyen

20 bài viết.
35 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
35 5
(Ảnh) Hai ngày nay mình đã tìm hiểu về Amazon S3, Cloudfront và Letsencrypt để xây dựng 2 trang web static, thứ nhất là trang chủ của (Link) và t...
Giang Nguyen viết gần 4 năm trước
35 5
White
10 0
Đôi dòng về ID3 (Ảnh) Nếu bạn nào chưa biết thì có thể đọc phần này, hoặc biết rồi thì có thể next tới phần kế tiếp nhé. 1. Giới thiệu Như hì...
Giang Nguyen viết hơn 3 năm trước
10 0
White
10 0
Type Result Type trên dùng để làm gì? Result được dùng cho những trường hợp chúng ta muốn return lại một giá trị nào đó (Ok) hoặc propagating erro...
Giang Nguyen viết hơn 3 năm trước
10 0
Bài viết liên quan
White
0 5
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết hơn 2 năm trước
0 5
White
4 3
Hôm nay tự viết lại cái note này về quá trình học Rust, xem như là tự giúp mình nhớ sâu và rõ hơn về Rust. Note này sẽ ngắn gọn hơn bản (Link). Sơ...
Giang Nguyen viết gần 4 năm trước
4 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
20 bài viết.
35 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!