内建类型表面
这一页只说明用户在第一阶段可以直接使用的内建类型方法与相关约束。
总体规则
- Dujie 当前不支持用户自定义方法
- 点调用只出现在语言内建方法上
- 当前没有公开的内建属性
- 当前也没有公开的内建结构体
这意味着:
list.push(...)、map.contains(...)、iter.map(...)是语言内建能力xs.len、m.size、x.value这类属性式访问不是当前公开表面opt<T>、widget、iter<T>都不是可字段访问的内建结构体
list<T>
list<T> 当前公开的方法:
len() -> intpush(value: T)pop()remove(index: int)clear()
配套规则:
- 支持下标访问:
xs[i] - 支持下标赋值:
xs[i] = v - 更新操作只能作用于
var绑定 - 越界访问、越界写入、空列表
pop()都会panic
map<K, V>
map<K, V> 当前公开的方法:
len() -> intcontains(key: K) -> boolremove(key: K)clear()
配套规则:
- 支持下标访问:
m[k] - 支持下标赋值:
m[k] = v m[k]缺 key 时panicm[k] = v缺 key 时直接插入remove(k)缺 key 时panic- 更新操作只能作用于
var绑定
当前 map key 只允许:
intboolrunestring
opt<T>
opt<T> 当前不提供普通点调用方法。
公开表面只有这些语言构造:
nonesome(x)x is nonex is some(v)
另外:
- 参数类型为
opt<T>时允许省略 - 直接传入
T时会自动提升为some(T)
iter<T>
iter<T> 是遍历用的中间类型。
当前公开的方法:
map(f) -> iter<U>filter(f) -> iter<T>collect() -> list<T>
另外:
iter<T>可用于for x in expriter<T>不支持下标访问- 它更适合作为遍历管道,而不是长期保存的数据值
string、基础数值与 bool
第一阶段这些类型都不提供公开点调用方法或属性:
stringintfloatboolrune
它们的能力主要来自字面量、运算、比较和少量显式转换。
any 与 widget
any 当前不提供普通点调用方法或属性。
它的主要公开表面是:
- 装箱到
any - 通过
is做显式收窄
widget 也是一等类型,但不提供公开点调用方法或属性。
说明
更完整的设计背景见:
docs/01.design/17.built-in-types-surface.mddocs/01.design/19.built-in-structs-and-runtime-types.md