MoonBit 语言导览 MoonBit

结构体

结构体是由其他类型组合而成的新类型。

在示例中,我们定义了一个包含两个整数字段xy的结构体Point

我们可以通过编写 Point::{ x: 3, y: 4 } 来创建 Point 实例。保留 Point:: 前缀可以明确指出所构造的类型。在某些上下文中,编译器仍能推断 { x: 3, y: 4 } 这类未限定字面量的类型,但直接使用 let 绑定时推荐使用带类型前缀的形式。

与元组类似,我们可以使用point.x语法来访问结构体的字段。

结构体定义后的 derive(Debug) 表示我们可以将结构体转换为调试表示,例如使用 to_repr

结构体字段默认是不可变的(immutable),创建后不可修改。MoonBit 提供称为功能更新(functional update)的语法,允许通过现有结构体创建包含更新字段的新结构体。

我们将在下一课中学习如何使结构体字段可变。

struct Point {
  x : Int
  y : Int
} derive(Debug)

fn main {
  // create a point
  let point = Point::{ x: 3, y: 4 }
  println("point: \{to_repr(point)}")
  println("point.x: \{point.x}")
  println("point.y: \{point.y}")
  
  // functional update
  let point2 = Point::{ ..point, x: 20 }
  println("update: \{to_repr(point2)}")
}