方法
在 MoonBit 里,方法是关联到某个类型上的顶层函数。可以用 fn T::method_name(..) -> ..来定义方法,定义出的方法会被关联到类型 T 上。在方法的签名中,可以用 Self 来指代 T,这在 T 很长时可以简化签名。
可以用下列两种方式来调用方法:
- 所有方法都可以用
T::method_name(..)的形式调用 - 方法也可以用
x.method_name(..)的形式调用,假设x的类型是T,这种写法等价于T::method_name(x, ..)
之前的章节中已经出现了很多方法,例如 Array::make(..) 和 array.length()。
方法也支持部分应用(partial application),x.f(_) 和 _.f(..) 都是合法的匿名函数。
struct MyInt (Int)
fn MyInt::increment(self : Self) -> Self {
let MyInt(x) = self
MyInt(x + 1)
}
fn main {
let x = MyInt(39)
let y = x.increment() // 用 `.` 语法调用方法
let z = MyInt::increment(y) // 也可以用 `T::method_name` 调用
println(z.0)
}