Rust函数方法(method)
方法是依附于对象的函数,在go语言中称之为结构体方法。在rust中方法通过关键字self
作为参数来访问对象中的数据。方法在impl
代码块中定义。
例一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| struct Point { x: f64, y: f64, }
impl Point { fn origin() -> Point { Point { x: 0.0, y: 0.0 } }
fn new(x: f64, y: f64) -> Point { Point { x: x, y: y } } }
|
以上struct Point
定义对象impl Point
用于实现对象Point的方法,分别为origin和new,这两个方法数据静态方法。一般用于对象的构造。构造方法Point::origin()
或者Point::new(1.0,2.0)
例二:
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
| struct Rectangle { p1: Point, p2: Point, }
impl Rectangle {
fn area(&self) -> f64 { let Point { x: x1, y: y1 } = self.p1; let Point { x: x2, y: y2 } = self.p2; ((x1 - x2) * (y1 - y2)).abs() }
fn perimeter(&self) -> f64 { let Point { x: x1, y: y1 } = self.p1; let Point { x: x2, y: y2 } = self.p2;
2.0 * ((x1 - x2).abs() + (y1 - y2).abs()) }
fn translate(&mut self, x: f64, y: f64) { self.p1.x += x; self.p2.x += x;
self.p1.y += y; self.p2.y += y; } }
|
这里Rectangle
也是一个结构体,其结构体成员类型也为结构体Point
类型,为结构体嵌套。其结构体方法中关键字self
作为参数来访问对象中的数据。类似于golang中func(r *Rectangle)funName(){}
。调用方式:
1 2 3 4 5 6 7 8
| let rectangle = Rectangle { p1: Point::origin(), p2: Point::new(3.0, 4.0), }; println!("Rectangle perimeter: {}", rectangle.perimeter()); println!("Rectangle area: {}", rectangle.area());
|
例三:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| struct Pair(Box<i32>, Box<i32>);
impl Pair { fn destroy(self) { let Pair(first, second) = self;
println!("Destroying Pair({}, {})", first, second);
} }
|
这里其实主要要注意的是参数离开作用域后释放:
1 2 3 4 5
| let pair = Pair(Box::new(1), Box::new(2));
pair.destroy();
pair.destroy();
|