结构体
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,
}
这里 User 和 Author 不是同一类型,即使字段完全相同。
泛型结构体
结构体可以带类型参数:
struct Box<T> {
value: T,
}
构造时允许从字段值局部推导类型参数:
let a = Box { value: "x" }; // Box<string>
递归
允许通过 opt<T>、list<T>、map<K, T> 间接递归:
struct Node {
next: opt<Node>,
}
不允许字段直接按值引用自身类型。