【rust】结构体
结构体
为什么会有多个 impl Engine?
- 组织代码:把一部分方法放一个 impl,另一部分放另一个 impl,比如基础方法和扩展方法分开写。
- 实现不同 trait:通常用 impl Engine 实现类型自身的方法,再用 impl Trait for Engine 实现某个 trait。
- 分文件:如果用模块分文件,有时也会分开写 impl。
struct Engine {
power: u32,
}
// 第一部分 impl,定义构造和基础方法
impl Engine {
pub fn new(power: u32) -> Self {
Self { power }
}
pub fn start(&self) {
println!("Engine starting with power {}", self.power);
}
}
// 第二部分 impl,实现更多功能
impl Engine {
pub fn stop(&self) {
println!("Engine stopped");
}
}
struct Person {
name: String,
age: u32,
}
impl Person {
// 构造方法,类似于 class 的构造函数
fn new(name: &str, age: u32) -> Self {
Self {
name: name.to_string(),
age,
}
}
// 成员方法:需要 self 参数
fn greet(&self) {
println!("Hello, my name is {} and I'm {} years old.", self.name, self.age);
}
// 可变方法
fn have_birthday(&mut self) {
self.age += 1;
}
}
fn main() {
let mut p = Person::new("Alice", 30);
p.greet();
p.have_birthday();
p.greet();
}

浙公网安备 33010602011771号