【转】rust--如何打印struct实例对象?
原文:https://www.jianshu.com/p/0ba974c3eaad

fn example1() {
// 第一种方法是给Struct增加一个derive(Debug).
#[derive(Debug)]
struct MyStruct {x: i32, y: i32}
let ms = MyStruct {x: 0, y: 10};
println!("{:?}", ms)
}
fn example2() {
// 第二种方法是自己去实现一个Display.
// Refer: https://stackoverflow.com/questions/30253422/how-to-print-structs-and-arrays
struct MyStruct {a: i32, b: i32}
impl std::fmt::Display for MyStruct {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "(value a: {}, value b: {})", self.a, self.b)
}
}
let ms = MyStruct { a: 0, b: 15 };
println!("Used Display: {}", ms);
}
fn main() {
example1(); // output: MyStruct { x: 0, y: 10 }
example2(); // output: Used Display: (value a: 0, value b: 15)
}
----------------------------
fn main() {
println!("Hello, world!");
let mut x = 5;
x += 2;
println!("{}", x);
println!("{} days", 31);
// Without a suffix, 31 becomes an i32. You can change what type 31 is
// by providing a suffix. The number 31i64 for example has the type i64.
// There are various optional patterns this works with. Positional
// arguments can be used.
println!("{0}, this is {1}. {1}, this is {0}", "Alice", "Bob");
// As can named arguments.
println!(
"{subject} {verb} {object}",
object = "the lazy dog",
subject = "the quick brown fox",
verb = "jumps over"
);
// Special formatting can be specified after a `:`.
println!(
"{} of {:b} people know binary, the other half doesn't",
1, 2
);
// You can right-align text with a specified width. This will output
// " 1". 5 white spaces and a "1".
println!("{number:>width$}", number = 1, width = 6);
// You can pad numbers with extra zeroes. This will output "000001".
println!("{number:0>width$}", number = 1, width = 6);
// Rust even checks to make sure the correct number of arguments are
// used.
println!("My name is {0}, {1} {0}", "Bond", "jjj");
// FIXME ^ Add the missing argument: "James"
// Create a structure named `Structure` which contains an `i32`.
// #[allow(dead_code)]
// #[derive(Debug)]
struct MStructure(i32);
impl std::fmt::Display for MStructure {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "(value a: {})", self.0)
}
}
// // However, custom types such as this structure require more complicated
// // handling. This will not work.
// // println!("This struct `{}` won't print...", Structure(3));
// // FIXME ^ Comment out this line.
let ms = MStructure(3);
println!("{}", ms);
// #[derive(Debug)]
// struct MyStruct {
// x: i32,
// y: i32,
// }
// let ms = MyStruct { x: 0, y: 10 };
// println!("{:?}", ms)
// #[derive(Debug)]
// struct MyyStruct(i32);
// let mm = MyyStruct(33);
// println!("{:?}", mm)
}

浙公网安备 33010602011771号