一键导入
cangjie-enum
仓颉语言枚举类型。当需要了解仓颉语言的enum定义规则、构造器(有参/无参/同名/非穷举)、枚举的使用与名称冲突、枚举成员函数和属性、递归枚举、枚举实现Equatable接口等特性时,应使用此 Skill
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
仓颉语言枚举类型。当需要了解仓颉语言的enum定义规则、构造器(有参/无参/同名/非穷举)、枚举的使用与名称冲突、枚举成员函数和属性、递归枚举、枚举实现Equatable接口等特性时,应使用此 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-enum |
| description | 仓颉语言枚举类型。当需要了解仓颉语言的enum定义规则、构造器(有参/无参/同名/非穷举)、枚举的使用与名称冲突、枚举成员函数和属性、递归枚举、枚举实现Equatable接口等特性时,应使用此 Skill |
enum 关键字 + 名称 + {} 体定义| 分隔(第一个 | 可选)Red)或有参(Red(UInt8))Bool、String、Int64 等都是关键字)。若需要使用关键字作为构造器名,须用反引号转义(如 `Bool`),或改用其他名称(如 JBool):
// 错误:Bool 是关键字
// | Bool(Bool) // 编译错误
// 正确:使用反引号转义或改名
| `Bool`(Bool) // 反引号转义
| JBool(Bool) // 改名避免冲突
... 构造器作为最后一个。不能直接匹配,须用 _ 或绑定模式(详见 cangjie-pattern-match Skill)// 基本枚举:无参构造器
enum Direction {
| Up | Down | Left | Right
}
// 有参构造器
enum RGBColor {
| Red(UInt8) | Green(UInt8) | Blue(UInt8)
}
// 同名构造器(参数个数不同)
enum Color {
| Red | Green | Blue
| Red(UInt8) | Green(UInt8) | Blue(UInt8)
}
// 非穷举枚举
enum Token {
| Number | Plus | Minus | ...
}
// 递归枚举
enum Expr {
| Num(Int64)
| Add(Expr, Expr)
| Sub(Expr, Expr)
}
// 包含成员函数的枚举
enum RGBColor2 {
| Red | Green | Blue
public func getName() {
match (this) { // this 表示当前枚举实例
case Red => "Red"
case Green => "Green"
case Blue => "Blue"
}
}
}
TypeName.Constructor 或直接使用构造器名创建实例enum RGBColor {
| Red | Green | Blue(UInt8)
}
main() {
let r = RGBColor.Red // 类型名限定
let g = Green // 直接使用构造器名
let b = Blue(100) // 有参构造器
}
let Red = 1 // 变量名与构造器同名
enum RGBColor {
| Red | Green(UInt8) | Blue(UInt8)
}
let r1 = Red // 选择变量 Red,而非构造器
let r2 = RGBColor.Red // 正确:通过类型名访问构造器
Equatable 接口,不能直接使用 == 比较枚举值== 比较,须使用 @Derive[Equatable] 宏自动派生(std.deriving.*)@Derive 时,可通过 match 表达式匹配枚举模式进行处理(详见 cangjie-pattern-match Skill)关于
@Derive宏的详细用法,可参阅cangjie-std-libsSkill
import std.deriving.*
@Derive[Equatable]
enum Color {
| Red | Green | Blue
}
main() {
let c = Color.Red
// 使用 @Derive 实现 Equatable 接口后可直接用 == 比较
if (c == Color.Red) {
println("It's red!")
}
}
// ❌ 错误:枚举默认不支持 == 比较
enum Status {
| Active | Inactive
}
// if (Status.Active == Status.Inactive) { } // 编译错误
Option 是仓颉预置的一个枚举类型,可表示或有或无的值,引用有效值前必须匹配判断,用于应对空值安全问题,详见
cangjie-optionSkill
import std.deriving.*
// 使用枚举定义一个简单的表达式求值器
enum Expr {
| Num(Int64)
| Add(Expr, Expr)
| Neg(Expr)
}
// 为枚举实现 ToString 接口
enum Color <: ToString { // 也可用 @Derive[ToString] 自动实现
Red | Green | Blue
public func toString() { // 枚举中可以定义成员函数
match (this) {
case Red => "Red"
case Green => "Green"
case Blue => "Blue"
}
}
}
main() {
// 创建枚举值
let expr = Add(Num(1), Neg(Num(2)))
// 可结合 match 递归求值,详见 cangjie-pattern-match Skill
// eval(expr) => 1 + (-2) = -1
// 实现 ToString 接口的枚举类型可打印
let color = Red
println(color)
}