Rust: Formatted print
TIL
498
Rust
27
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.
34 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
30 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 1 năm trước
30 5
White
9 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 12 tháng trước
9 0
White
8 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 11 tháng trước
8 0
Bài viết liên quan
White
18 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết hơn 1 năm trước
18 1
White
1 1
Chào mọi người, hôm nay mình viết một bài TIL nhỏ về cách lấy độ phân giải của màn hình hiện tại đang sử dụng. xdpyinfo | grep dimensions Kết quả...
namtx viết 7 tháng trước
1 1
White
8 0
Lấy fake path của file trong html input Ngữ cảnh: em cần làm một cái nút tải ảnh lên có preview. GIải pháp đầu: Dùng (Link) đọc file ảnh thành ba...
Hoàng Duy viết gần 2 năm trước
8 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
20 bài viết.
34 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á!