Go似乎能够直接打印结构和数组。
struct MyStruct {
a: i32,
b: i32
}
和
let arr: [i32; 10] = [1; 10];
答案 0 :(得分:47)
您想在结构上实现Debug
特征。使用#[derive(Debug)]
是最简单的解决方案。然后,您可以使用{:?}
打印它:
#[derive(Debug)]
struct MyStruct{
a: i32,
b: i32
}
fn main() {
let x = MyStruct{ a: 10, b: 20 };
println!("{:?}", x);
}
答案 1 :(得分:9)
作为mdup says,您可以使用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);
}
外壳:
Used Display: (value a: 0, value b: 0)
有关详细信息,请查看fmt
module documentation。
答案 2 :(得分:3)
由于这里没有人明确回答数组,要打印出一个数组,你需要指定{:?}
,也用于打印调试输出
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
--> src\main.rs:6:22
|
| println!("{:?}", array1d);
| ^^^^^^^ the trait `std::fmt::Debug` is not implemented for `[{integer}; 33]`
可以使用此答案的方法打印更长的数组:Implement Debug trait for large array type
答案 3 :(得分:3)
实际上只需{:?}
即可。
let a = [1, 2, 3, 4, 5];
let complete = &a[..];
println! ("{:?}", a);
println! ("{:?}", complete);
答案 4 :(得分:0)
#[derive(Debug)]
struct Rectangle{
width: u32,
height: u32,
}
fn main(){
let rec = Rectangle{
width: 50,
height: 30,
};
println!("The rectangle {:?} ", rec);
println!("The area of the rectangle is {} pixels",
area_rectangle(&rec));
}
fn area_rectangle(rectangle: &Rectangle) -> u32{
rectangle.width * rectangle.height
}