一键导入
cangjie-type-system
仓颉语言类型系统。当需要了解仓颉语言的子类型关系(继承/接口实现/元组/函数类型)、型变规则(协变/逆变/不型变)、类型转换(is/as操作符)、数值类型转换、Rune转换、Nothing/Any/Object等基础类型关系、类型别名(type)等特性时,应使用此 Skill。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
仓颉语言类型系统。当需要了解仓颉语言的子类型关系(继承/接口实现/元组/函数类型)、型变规则(协变/逆变/不型变)、类型转换(is/as操作符)、数值类型转换、Rune转换、Nothing/Any/Object等基础类型关系、类型别名(type)等特性时,应使用此 Skill。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
通用算法与数据结构实现参考——排序、搜索、动态规划、图算法、字符串处理的多语言惯用写法和模板代码(Python/C++/Java/Go/Cangjie)
仓颉语言算法与数据结构实现参考——排序、搜索、动态规划、图算法、字符串处理、集合操作的惯用写法和模板代码
仓颉编程语言基本概念和规则,当需要了解关键字、标识符、程序结构、变量定义(let/var/const)、值类型与引用类型、作用域规则、表达式(if/while/for-in/break/continue)、函数等基本概念时,应使用此 Skill
仓颉语言基本数据类型。当需要了解仓颉语言的整数、浮点、布尔、字符(Rune)、字符串(String)、Unit、Nothing、元组(Tuple)、数组(Array/VArray)、区间(Range)类型以及基本运算符的语法和规则时,应使用此 Skill。
仓颉程序与C程序互操作指导,包括foreign声明、CFunc、inout参数、unsafe块、调用约定、类型映射(基础类型/结构体/CPointer/VArray/CString)、C回调仓颉、内存管理等特性时,应使用此 Skill
仓颉语言类。当需要了解仓颉语言的类定义、抽象类、构造函数(init/主构造函数)、终结器(~init)、继承(单继承/sealed)、重写(override)、重定义(redef)、成员变量、成员函数、属性(prop)、访问修饰符、This类型、对象创建等特性时,应使用此 Skill。
| name | cangjie-type-system |
| description | 仓颉语言类型系统。当需要了解仓颉语言的子类型关系(继承/接口实现/元组/函数类型)、型变规则(协变/逆变/不型变)、类型转换(is/as操作符)、数值类型转换、Rune转换、Nothing/Any/Object等基础类型关系、类型别名(type)等特性时,应使用此 Skill。 |
T,可接受 T 的任何子类型class Sub <: Super {} → Sub <: Super(C2, C4) <: (C1, C3) 若 C2 <: C1 且 C4 <: C3(U1) -> S2 <: (U2) -> S1 当且仅当 U2 <: U1 且 S2 <: S1T <: T(自反性)Nothing <: T 对所有 T 成立T <: Any 对所有 T 成立C <: Object 对任何 class C 成立A <: B 且 B <: C,则 A <: Cclass C<Z> <: I<Z, Z> {} → C<Bool> <: I<Bool, Bool>设 A、B 为类型,T 为类型构造器(含一个类型参数 X):
| 型变 | 条件 | 说明 |
|---|---|---|
| 不型变(invariant) | T<A> <: T<B> 当且仅当 A = B | 用户定义的泛型类型默认行为 |
| 协变(covariant) | T<A> <: T<B> 当且仅当 A <: B | 内建元组类型对每个元素协变 |
| 逆变(contravariant) | T<A> <: T<B> 当且仅当 B <: A | 内建函数类型在参数处逆变 |
interface I<X> 和 D <: C,I<D> <: I<C> 不成立A = B 时,I<A> <: I<B> 才成立注意:
class以外的类型实现接口,该类型和该接口之间的子类型关系不能作为协变和逆变的依据。
T(e) 其中 T 和 e 为任意数值类型(Int8/Int16/Int32/Int64/IntNative/UInt8/UInt16/UInt32/UInt64/UIntNative/Float16/Float32/Float64)Rune ↔ 整数转换UInt32(runeExpr) — 返回 Unicode 标量值Rune(intExpr) — 仅当值在 [0x0000, 0xD7FF] 或 [0xE000, 0x10FFFF] 范围内有效;否则编译报错或运行时抛异常is 运算符e is T → Bool。当 e 的运行时类型是 T 的子类型时返回 truelet b: Base = Derived()
b is Derived // true
b is Base // true
as 运算符e as T → Option<T>。运行时类型是子类型时返回 Some(e),否则返回 NoneOptionlet b: Base = Derived()
b as Derived // Option<Derived>.Some(b)
b as String // Option<String>.None
typetype Alias = OriginalTypevar a: A = B() 其中 type A = BA() 构造 BA.foo()、A.bTime.Day 其中 type Time = TimeUnitwhere 约束type RD<T> = RecordData<T>