MoonBit 语言导览 MoonBit

方法

在 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(..) 都是合法的匿名函数。

type MyInt Int derive(Show)

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)
}