定义方式
- 关联函数:在结构体或枚举的
impl
块中定义,使用self
参数(Self
类型)。语法为impl StructName { fn function_name(parameters) -> return_type { /* 函数体 */ } }
。
- trait方法:在
trait
块中定义方法签名,由实现该trait
的类型来提供具体实现。语法为pub trait TraitName { fn function_name(parameters) -> return_type; }
。
调用方式
- 关联函数:通过结构体或枚举类型名直接调用,格式为
StructName::function_name(arguments)
。
- trait方法:通过实现了该
trait
的实例来调用,格式为instance.function_name(arguments)
。
适用场景
- 关联函数:适用于与特定类型紧密相关,但不依赖于实例状态的操作,比如创建实例的构造函数。
- trait方法:适用于定义一组类型共享的行为,提高代码的复用性和抽象性,不同类型可以有不同实现。
示例
关联函数示例
struct Point {
x: i32,
y: i32,
}
impl Point {
fn new(x: i32, y: i32) -> Point {
Point { x, y }
}
}
fn main() {
let p = Point::new(10, 20);
println!("x: {}, y: {}", p.x, p.y);
}
trait方法示例
trait Draw {
fn draw(&self);
}
struct Rectangle {
width: u32,
height: u32,
}
impl Draw for Rectangle {
fn draw(&self) {
println!("Drawing a rectangle with width {} and height {}", self.width, self.height);
}
}
fn main() {
let rect = Rectangle { width: 10, height: 5 };
rect.draw();
}