泛型
Dujie 当前提供一套简单泛型系统。
支持范围
第一阶段泛型只允许出现在:
- 顶层
func - 顶层
struct
泛型函数
func id<T>(x: T) -> T {
x
}
函数调用时优先从普通实参推导类型参数:
id(1)
id<string>("hello")
泛型结构体
struct Box<T> {
value: T,
}
类型位置需要显式写出类型实参:
let a: Box<string>
构造时如果字段值足以唯一推导类型参数,可以直接写:
let x = Box { value: "hello" }
当前约束
当前唯一内建约束是 key:
func has_key<K: key, V>(m: map<K, V>, k: K) -> bool {
m.contains(k)
}
满足 key 的类型目前只有:
intboolrunestring
当前不支持
- 用户自定义方法泛型
- 通用
comparable约束 where子句- 用户自定义约束