Methods and Associated Functions

Icon Link方法和关联函数

Icon Link方法

方法与函数 类似,我们使用 fn 关键字声明它们,它们有参数并返回一个值。但是,与函数不同,方法 是在结构体(或枚举)的上下文中定义的,并且要么引用该类型,要么对其进行修改。方法的第一个参数始终是 self,它表示调用该方法的结构体(或枚举)的实例。

Icon Link关联函数

关联函数方法 非常相似,因为它们也在结构体或枚举的上下文中定义,但它们实际上不使用结构体中的任何数据,因此不会将 self 作为参数。关联函数可以是独立的函数,但它们包含在特定类型中是出于组织或语义上的原因。

Icon Link构造函数

构造函数是构造新实例的关联函数,或者换句话说是实例化。它们的返回类型始终是类型本身。例如,具有私有字段的公共结构体必须提供公共构造函数,否则它们不能在声明它们的模块之外被实例化。

Icon Link声明方法和关联函数

要为结构体或枚举声明方法和关联函数,请使用 impl 块。在这里,impl 是 implementation 的缩写。

script;
 
struct Foo {
    bar: u64,
    baz: bool,
}
 
impl Foo {
    // this is a _method_, as it takes `self` as a parameter.
    fn is_baz_true(self) -> bool {
        self.baz
    }
 
    // this is an _associated function_, since it does not take `self` as a parameter.
    // it is at the same time a _constructor_ because it instantiates and returns
    // a new instance of `Foo`.
    fn new_foo(number: u64, boolean: bool) -> Foo {
        Foo {
            bar: number,
            baz: boolean,
        }
    }
}
 
fn main() {
    let foo = Foo::new_foo(42, true);
    assert(foo.is_baz_true());
}
 

要调用方法,只需使用点语法:foo.iz_baz_true()

自由函数 类似,方法和关联函数可能会接受 ref mut 参数。

例如:

struct Coordinates {
    x: u64,
    y: u64,
}
 
impl Coordinates {
    fn move_right(ref mut self, distance: u64) {
        self.x += distance;
    }
}

在调用时:

let mut point = Coordinates { x: 1, y: 1 };
point.move_right(5);
assert(point.x == 6);
assert(point.y == 1);