Rust 学习笔记(9)-方法

本篇是阅读 《Rust 程序设计语言》第5.3章 方法语法 而来的结果

之前我们提到过 方法 就是 函数,只不过他是定义在结构体上下文中的,这个就是其他语言中的方法的概念一样,没什么好说的

完整代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// 方法的第一个参数总是 self,它代表调用该方法的结构体实例。

// 定义一个矩形
#[derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}

// 在impl 块中定义方法,impl 块中的所有内容都将与 Rectangle 类型相关联
impl Rectangle {
    // 这是个函数,不是方法,它在Rust中叫做关联函数,因为它的第一个参数不是 self
    fn from(size: u32) -> Rectangle {
        // 关联函数(associated functions),因为它们与结构体相关联。
        // 它们仍是函数而不是方法,因为它们并不作用于一个结构体的实例。
        // 你已经使用过 String::from 关联函数了。
        // 关联函数经常被用作返回一个结构体新实例的构造函数。
        // 关联函数类似其他语言中的 `静态方法`,它的作用类似于其他语言中的 `构造函数`
        Rectangle {
            width: size,
            height: size,
        }
    }

    // 方法1
    fn area(&self) -> u32 {
        self.width * self.height
    }

    // 方法2
    fn can_hold(&self, other: &Rectangle) -> bool {
        // 如果 self 能完全包含第二个长方形则返回 true;否则返回 false。
        self.width > other.width && self.height > other.height
    }
}

fn main() {
    let rect1 = Rectangle {
        width: 30,
        height: 50,
    };
    let rect2 = Rectangle {
        width: 10,
        height: 40,
    };
    let rect3 = Rectangle {
        width: 60,
        height: 45,
    };

    println!("{:?}", rect1);
    println!(
        "The area of the rectangle is {} square pixels.",
        rect1.area() // 调用方法
    );

    println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
    println!("Can rect1 hold rect3? {}", rect1.can_hold(&rect3));

    let rect4 = Rectangle::from(3);
    println!("{:?}", rect4);
}

总结一下

  1. 方法在 impl 块中定义
  2. 方法的第一个参数总是 self
  3. 关联函数通常用于返回一个结构体的新实例,它类似其他语言中的 静态方法,它的作用类似于其他语言中的 构造函数
updatedupdated2025-03-012025-03-01