结构体

struct 是 Dujie 的具名名义类型。

定义

结构体只支持具名字段:

struct User {
    name: string,
    age: int,
}

规则:

  • 字段声明写作 name: Type
  • 不支持匿名成员结构体
  • 不支持 tuple struct
  • 不支持按数字索引访问
  • 第一阶段不支持字段默认值

构造

使用具名构造:

let user = User {
    name: "Alice",
    age: 30,
};

规则:

  • 所有字段必须显式提供
  • 未知字段是编译错误
  • 重复字段是编译错误
  • 缺字段是编译错误

访问与更新

字段访问使用点操作:

let name = user.name;

字段更新要求目标来自 var 绑定:

var user = User {
    name: "Alice",
    age: 30,
};

user.name = "Bob";

如果字段不存在,是编译错误。

名义类型

结构体采用名义类型规则。

struct User {
    name: string,
}

struct Author {
    name: string,
}

这里 UserAuthor 不是同一类型,即使字段完全相同。

泛型结构体

结构体可以带类型参数:

struct Box<T> {
    value: T,
}

构造时允许从字段值局部推导类型参数:

let a = Box { value: "x" };  // Box<string>

递归

允许通过 opt<T>list<T>map<K, T> 间接递归:

struct Node {
    next: opt<Node>,
}

不允许字段直接按值引用自身类型。