结构体和方法:
Rust 使用结构体(Structs)来定义数据结构,并通过 impl 块为结构体添加方法。
// 定义一个结构体
struct Circle {
radius: f64,
}
// 为结构体添加方法
impl Circle {
// 构造函数
fn new(radius: f64) -> Circle {
Circle { radius }
}
// 计算圆的面积
fn area(&self) -> f64 {
std::f64::consts::PI * self.radius * self.radius
}
}
fn main() {
// 创建 Circle 结构体的实例
let circle = Circle::new(5.0);
// 调用结构体的方法
let area = circle.area();
println!("Circle area: {}", area);
}
在这个例子中,Circle 结构体具有一个关联的构造函数 new 和一个方法 area。
Trait 和实现:
Rust 中使用 Trait 类似于接口,通过为类型实现 Trait 来定义共享的行为。
// 定义一个 Trait
trait Shape {
fn area(&self) -> f64;
}
// 实现 Trait for Circle 结构体
impl Shape for Circle {
fn area(&self) -> f64 {
std::f64::consts::PI * self.radius * self.radius
}
}
fn main() {
let circle = Circle::new(5.0);
// 使用 Trait 中的方法
let area = circle.area();
println!("Circle area: {}", area);
}
在这个例子中,Shape 是一个 Trait,impl Shape for Circle 表示为 Circle 结构体实现了 Shape Trait。
关联函数和类型方法:
Rust 允许在 impl 块中定义关联函数和类型方法,这类似于类中的静态方法。
struct Rectangle {
width: f64,
height: f64,
}
impl Rectangle {
// 关联函数,类似于静态方法
fn square(size: f64) -> Rectangle {
Rectangle { width: size, height: size }
}
// 类型方法,通过 &self 访问实例
fn area(&self) -> f64 {
self.width * self.height
}
}
fn main() {
let square = Rectangle::square(4.0);
// 调用类型方法
let area = square.area();
println!("Square area: {}", area);
}
在这个例子中,square 是一个关联函数,而 area 是一个类型方法。
虽然 Rust 不是纯粹的面向对象语言,但通过结构体、Trait 和关联函数,你仍然可以使用一些面向对象编程的思想来组织和抽象代码。这种方式更注重表达数据和行为之间的关系,而不是通过类继承来组织代码。
转载请注明出处:http://www.zyzy.cn/article/detail/13733/Rust