面试题答案
一键面试- 代码示例:
#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point { x: 10, y: 20 };
println!("{:?}", p);
}
- 关键步骤解释:
- 使用
derive
属性:在结构体定义前加上#[derive(Debug)]
,这告诉Rust编译器自动为Point
结构体实现Debug
trait。derive
属性让编译器为我们生成一些常见trait(如Debug
、Clone
、Copy
等)的默认实现。 - 打印结构体:在
main
函数中,通过println!("{:?}", p);
来打印Point
结构体实例p
。{:?}
是Debug
格式化输出的占位符,使用这种格式化方式,就会调用Point
结构体的Debug
实现来将结构体内容以可读的方式输出到控制台。
- 使用
如果不使用derive
,也可以手动实现Debug
trait:
struct Point {
x: i32,
y: i32,
}
impl std::fmt::Debug for Point {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Point {{ x: {}, y: {} }}", self.x, self.y)
}
}
fn main() {
let p = Point { x: 10, y: 20 };
println!("{:?}", p);
}
在手动实现Debug
trait时:
- 实现fmt
方法:为结构体实现std::fmt::Debug
trait中的fmt
方法。fmt
方法接收一个可变的Formatter
引用,用于格式化输出。在方法内部,使用write!
宏将结构体成员以合适的格式写入Formatter
。write!
宏返回一个Result
类型,需要将其正确返回。