一键导入
cangjie-generic
仓颉语言泛型。当需要了解仓颉语言的泛型函数、泛型类、泛型接口、泛型结构体、泛型枚举、泛型约束(where)、泛型子类型关系、型变(不变/协变/逆变)等特性时,应使用此 Skill。类型别名相关内容请参见 cangjie-type-system Skill。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
仓颉语言泛型。当需要了解仓颉语言的泛型函数、泛型类、泛型接口、泛型结构体、泛型枚举、泛型约束(where)、泛型子类型关系、型变(不变/协变/逆变)等特性时,应使用此 Skill。类型别名相关内容请参见 cangjie-type-system 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-generic |
| description | 仓颉语言泛型。当需要了解仓颉语言的泛型函数、泛型类、泛型接口、泛型结构体、泛型枚举、泛型约束(where)、泛型子类型关系、型变(不变/协变/逆变)等特性时,应使用此 Skill。类型别名相关内容请参见 cangjie-type-system Skill。 |
function、class、interface、struct、enum| 术语 | 含义 |
|---|---|
| 类型形参 | 须在使用处指定的类型。使用标识符在体内引用 |
| 类型变元 | 在体内引用类型形参的标识符 |
| 类型实参 | 使用泛型声明时提供的具体类型 |
| 类型构造器 | 接受零个或多个类型作为参数以产生具体类型的类型 |
<...> 声明class List<T> — T 是类型参数;List<Int64> — Int64 是类型实参;List 是类型构造器<> 中声明一个或多个类型参数func id<T>(a: T): T { return a }
class、struct、enum 可有泛型成员函数where 指定:class A {
func foo<T>(a: T): Unit where T <: ToString { println("${a}") }
}
interface、class、struct、enum、extend 可定义静态泛型函数open class Node<K, V> where K <: Hashable & Equatable<K> {
var key: Option<K> = Option<K>.None
var value: Option<V> = Option<V>.None
}
public interface Iterable<E> {
func iterator(): Iterator<E>
}
struct Pair<T, U> {
let x: T
let y: U
public init(a: T, b: U) { x = a; y = b }
}
Option<T>:public enum Option<T> {
Some(T)
| None
}
where 关键字,放在声明体之前where T1 <: Interface, T2 <: Class&:where T1 <: Interface1 & Interface2func genericPrint<T>(a: T) where T <: ToString {
println(a)
}
class Zoo<T> where T <: Animal { ... }
class C<Z> <: I<Z, Z>,则 C<Bool> <: I<Bool, Bool>、C<D> <: I<D, D> 等| 型变 | 条件 |
|---|---|
| 不变 | T(A) <: T(B) ⟺ A = B |
| 协变 | T(A) <: T(B) ⟺ A <: B |
| 逆变 | T(A) <: T(B) ⟺ B <: A |
| 特性 | function | class | interface | struct | enum |
|---|---|---|---|---|---|
| 类型参数 | ✅ | ✅ | ✅ | ✅ | ✅ |
where 约束 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 泛型成员函数 | — | ✅ | ✅ | ✅ | ✅ |
| 静态泛型函数 | — | ✅ | ✅ | ✅ | ✅ |
| 扩展中的泛型 | ✅ | — | — | — | — |
| 类型别名 | — | ✅ | — | ✅ | ✅ |
| 子类型型变 | — | 不变 | 不变 | 不变 | 不变 |