本文节选自<<Rust语言圣经>>一书
欢迎大家加入Rust编程学院,一起学习交流:
QQ群:1009730433
方法Method
从面向对象语言过来的同学对于方法肯定不陌生,class
里面就充斥着方法的概念,在Rust中方法的概念也大差不差,往往和对象成对出现:
object.method()
例如读取一个文件写入缓冲区,如果用函数的写法read(f,buffer)
,用方法的写法f.read(buffer)
. 不过与其它语言class
跟方法的联动使用不同,Rust的方法往往跟结构体、枚举、特征一起使用,特征将在后面几章进行介绍。
定义方法
Rust使用impl
来定义方法,例如以下代码:
struct Circle {
x: f64,
y: f64,
radius: f64,
}
impl Circle {
// new是Circle的关联函数,因为它的第一个参数不是self
// 这种方法往往用于初始化当前结构体的实例
fn new(x: f64, y: f64, radius: f64) -> Circle {
Circle {
x: x,
y: y,
radius: radius,
}
}
// Circle的方法,&self表示借用当前的Circle结构体
fn area(&self) -> f64 {
std::f64::consts::PI * (self.radius * self.radius)
}
}
我们这里先不详细展开讲解,首先建立对方法定义的大致印象。下面图片将Rust方法定义与其它语言的方法定义做一下对比:

可以看出,其它语言中所有定义都在class
中,但是Rust的对象定义和方法定义是分离的,这种数据和使用分离的方式,会给予使用者极高的灵活度。
再来看一个例子:
#[derive(Debug)]
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
}
fn main() {
let rect1 = Rectangle {
width: 30, height: 50 };
println!(
"The area of the rectangle is {} square pi