rust - rust - 如何打印结构和数组?

75 7

go似乎能够直接打印结构和数组。


struct MyStruct {


 a: i32,


 b: i32


}




let arr: [i32; 10] = [1; 10];



时间: 原作者:

50 5

你想在你的结构上实现Debug特性,使用#[derive(Debug)]是最简单的解决方案,然后你可以用{:?}打印它:


#[derive(Debug)]


struct MyStruct{


 a: i32,


 b: i32


}



fn main() {


 let x = MyStruct{ a: 10, b: 20 };


 println!("{:?}", x);


}



原作者:
64 5

你可以使用Debug,但是,也可以使用Display特性,你可以创建自定义输出:


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)


 }


}



fn main() {


 let test = MyStruct { a: 0, b: 0 };



 println!("Used Display: {}", test); 


}



shell:


Used Display: (value a: 0, value b: 0)



有关更多信息,你可以查看fmt模块文档

原作者:
94 0

这里没有人显式回答数组,打印出需要指定{:?}的数组,也用于打印调试输出,


let val = 3;


let length = 32; // the maximum that can be printed without error


let array1d = [val; length];


let array2d = [array1d; length]; // or [[3; 32]; 32];


let array3d = [array2d; length]; // or [[[3; 32]; 32]; 32];



但是,length > 32会在其中以错误退出的数组:


let length = 33;


let array1d = [3; length];


println("{:?}", array1d);



error[E0277]: the trait bound `[{integer}; 33]: std::fmt::Debug` is not satisfied


--> srcmain.rs:6:22


|


| println!("{:?}", array1d);


| ^^^^^^^ the trait `std::fmt::Debug` is not implemented for `[{integer}; 33]`



可以用这个答案的方法打印出更长的数组: 实现大数组类型的调试特性

原作者:
75 5

实际上{:?}足够了。


let a = [1, 2, 3, 4, 5];


let complete = &a[..];


println! ("{:?}", a);


println! ("{:?}", complete);



原作者:
...