泛型

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 的类型目前只有:

  • int
  • bool
  • rune
  • string

当前不支持

  • 用户自定义方法泛型
  • 通用 comparable 约束
  • where 子句
  • 用户自定义约束