stage1 重构测试且成功00-05
This commit is contained in:
@@ -120,6 +120,50 @@ type Name = enum { A, B, C, ... };
|
||||
|
||||
`type Name = ExistingType;` 形式用于定义简单类型别名,但目前仅支持聚合类型的别名定义。
|
||||
|
||||
### 聚合类型拓展与match
|
||||
```
|
||||
type Expr = enum {
|
||||
Int: i32,
|
||||
Add: struct { left: *Expr, right: *Expr },
|
||||
fn eval(self: *Expr) i32 {
|
||||
match self {
|
||||
.Int(val) => ret val,
|
||||
.Add(left, right) => ret eval(left) + eval(right),
|
||||
}
|
||||
ret 0;
|
||||
}
|
||||
}
|
||||
|
||||
type Point = struct {
|
||||
x: i32,
|
||||
y: i32,
|
||||
|
||||
type Test = enum {
|
||||
TestEnum0,
|
||||
TestEnum1
|
||||
}
|
||||
|
||||
fn init(x: i32, y: i32) Point {
|
||||
ret Point { .x = x, .y = y };
|
||||
}
|
||||
|
||||
fn dump(self: *Point) void {
|
||||
vm_printf("Point: %d %d", self.x, self.y);
|
||||
}
|
||||
}
|
||||
```
|
||||
这里面包括聚合类型声明除了成员以外任何东西,即整个编译模块也属于聚合类型,将类型抽象化。
|
||||
其中这里面还包括调用时支持第一个参数self匹配类型时自动填充。
|
||||
暂时默认全部pub即全部暴露没有不暴露的。
|
||||
|
||||
复合enum支持match等语法解包
|
||||
```
|
||||
match self {
|
||||
.Int(val) => ret val,
|
||||
.Add(left, right) => ret eval(left) + eval(right),
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 声明
|
||||
|
||||
Reference in New Issue
Block a user