结构体和方法
use std::fmt;
#[derive(Debug)]
struct Rectangle {
u32,
height: u32,
}
impl std::fmt::Display for Rectangle {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Rectangle {} height: {}", self.width, self.height)
}
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.width
}
fn can_hold(&self, other: &Rectangle) -> bool {
self.width > other.width && self.height > other.height
}
fn square(size: u32) -> Rectangle {
Rectangle {
size,
height: size,
}
}
}
fn main() {
let rect1 = Rectangle { 30, height: 50 };
let rect2 = Rectangle { 10, height: 40 };
let rect3 = Rectangle { 60, height: 45 };
let rect4 = Rectangle::square(40);
println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
println!("Can rect1 hold rect3? {}", rect1.can_hold(&rect3));
println!("rect4 is {}", rect4);
println!("rect4 is {:#?}", rect4);
println!(
"The area of the rectangle is {} square pixels.",
rect4.area()
);
}