在rust中,有的时候需要针对结构体的信息进行格式化的个性化输出,而不使用系统默认的通用方法输出,因此,就需要使用到impl display,debug这三个保留字构造输出,下面是方法。
第一种情况:使用系统默认的方法
#[derive(Debug)]//这里就是系统默认的方法
struct Infor{
name:String,
age:i32,
}
println!("开始了…");
let myinfor=Infor{name:"青山".to_string(),age:39};
println!("Display: {:?}",myinfor);
println!("name: {}",myinfor.name);
println!("age: {}",myinfor.age);
println!("Debug: {:?}",myinfor);
上述的代码运行后输出:
开始了…
Display: Infor { name: "青山", age: 39 }
name: 青山
age: 39
Debug: Infor { name: "青山", age: 39 }
第二种方法:使用自定义的方法
注意,使用自定义方法,就不能使用#[derive(Debug)]这一句了。
use std::fmt;
struct Infor{
name:String,
age:i32,
}
impl fmt::Display for Infor{
fn fmt(&self,f: &mut fmt::Formatter) -> fmt::Result{
write!(f,"姓名:{}, 年龄:{}",self.name,self.age)
}
}
impl std::fmt::Debug for Infor {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "姓名:{} 年龄:{}", self.name, self.age)
}
}
println!("开始了…");
let myinfor=Infor{name:"青山".to_string(),age:39};
println!("Display: {:?}",myinfor);
println!("name: {}",myinfor.name);
println!("age: {}",myinfor.age);
println!("Debug: {:?}",myinfor);
上述代码红色文字,即为个性化的地方。上述代码运行后输出:
开始了…
Display: 姓名:青山 年龄:39
name: 青山
age: 39
Debug: 姓名:青山 年龄:39