Menu
CoddyTech

实现块简介

本课属于 Coddy Rust 学习旅程的“面向对象编程”单元。第 1 课,共 61 课。

在 Rust 中,结构体定义了类型包含哪些数据,但不会定义该类型能做什么。要为结构体添加行为,我们会使用 impl 关键字来编写实现块。

实现块将函数(称为方法)与特定的结构体关联起来。基本结构如下:

struct Dog {
    name: String,
    age: u8,
}

impl Dog {
    fn bark(&self) {
        println!("{} says woof!", self.name);
    }
}

impl Dog 块告诉 Rust,其中的所有内容都属于 Dog 结构体。这种分离方式能让数据定义保持简洁,同时允许你在实现块中按需添加任意数量的方法。

要调用方法,请在实例上使用点表示法:

fn main() {
    let my_dog = Dog {
        name: String::from("Rex"),
        age: 3,
    };
    
    my_dog.bark(); // 输出:Rex says woof!
}

将数据(结构体)与行为(impl 块)分开,这种模式是组织 Rust 代码的基础。在接下来的课中,我们会探索方法如何通过你在上面示例中看到的 &self 参数访问结构体数据。

challenge icon

挑战

简单

创建一个包含两个字段的 Cat 结构体:name(String)和 lives(u8)。

为 Cat 添加一个实现块,其中包含一个名为 meow 的方法。该方法接收 &self,并打印猫的名字,后面接上 " says meow!"。

你会收到两个输入:

  • 第一行:猫的名字(String)
  • 第二行:剩余生命数(u8)

使用提供的值创建一个 Cat 实例,并调用它的 meow 方法。

预期输出格式:

{name} says meow!

亲手试试

use std::io;

// TODO: 定义 Cat 结构体,包含 'name'(String)和 'lives'(u8)字段


// TODO: 为 Cat 添加实现块,并定义 'meow' 方法


fn main() {
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    let mut lives_input = String::new();
    io::stdin().read_line(&mut lives_input).expect("Failed to read line");
    let lives: u8 = lives_input.trim().parse().expect("Failed to parse lives");
    
    // TODO: 创建一个 Cat 实例并调用 meow 方法
    
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Rust 在线编译器