一键导入
cangjie-basic-data-type
仓颉语言基本数据类型。当需要了解仓颉语言的整数、浮点、布尔、字符(Rune)、字符串(String)、Unit、Nothing、元组(Tuple)、数组(Array/VArray)、区间(Range)类型以及基本运算符的语法和规则时,应使用此 Skill。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
仓颉语言基本数据类型。当需要了解仓颉语言的整数、浮点、布尔、字符(Rune)、字符串(String)、Unit、Nothing、元组(Tuple)、数组(Array/VArray)、区间(Range)类型以及基本运算符的语法和规则时,应使用此 Skill。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | cangjie-basic-data-type |
| description | 仓颉语言基本数据类型。当需要了解仓颉语言的整数、浮点、布尔、字符(Rune)、字符串(String)、Unit、Nothing、元组(Tuple)、数组(Array/VArray)、区间(Range)类型以及基本运算符的语法和规则时,应使用此 Skill。 |
Int8、Int16、Int32、Int64、IntNativeUInt8、UInt16、UInt32、UInt64、UIntNativeIntNative/UIntNative 为平台相关宽度Int64(无上下文时字面量默认推断为 Int64)0b 或 0B 前缀,例如 0b000110000o 或 0O 前缀,例如 0o30240x 或 0X 前缀,例如 0x18_ 分隔:0b0001_1000| 后缀 | 类型 | 后缀 | 类型 |
|---|---|---|---|
i8 | Int8 | u8 | UInt8 |
i16 | Int16 | u16 | UInt16 |
i32 | Int32 | u32 | UInt32 |
i64 | Int64 | u64 | UInt64 |
示例:100i8、0x10u64、0o432i32
b'x',表示 UInt8 类型的 ASCII 值b'\n'、b'\\'b'\u{78}'(最多 2 位十六进制,值 < 256)++/--)、复合赋值Rune.toInt64() 等方法:
let n = Int64(value) // 将其他数值类型转换为 Int64
let u = UInt32(runeValue) // 将 Rune 转换为 UInt32
let f = Float64(intValue) // 将整数转换为 Float64
let r = Rune(intValue) // 将整数转换为 Rune
parse 静态方法(需导入 std.convert.*):
import std.convert.*
let n = Int64.parse("42") // 解析失败抛异常
let f = Float64.parse("3.14") // 解析失败抛异常
Float16(二进制16位,约3位有效数字)Float32(二进制32位,约6位有效数字)Float64(二进制64位,约15位有效数字)e/E(以10为底),例如 3.14、2e3、2.4e-10x/0X 前缀;须有指数用 p/P(以2为底),例如 0x1.1p0、0x1p2| 后缀 | 类型 |
|---|---|
f16 | Float16 |
f32 | Float32 |
f64 | Float64 |
注意只有以上三种后缀,没有 f 后缀
++/--)Booltrue、false!(非)、&&(与)、||(或)==、!=&&=、||=Rune,表示所有 Unicode 字符r,后跟单引号或双引号r'a'、r"b"r'\\'、r'\n'、r'\t'r'\u{4f60}'(1~8 位十六进制)<、>、<=、>=、==、!=(比较 Unicode 值)Rune → UInt32 转换;任意整数类型 → Rune 转换Rune 不支持算术运算(+、-、*、/ 等均不可用),需要先转换为整数类型再计算:
// 错误:Rune 不支持减法
// let diff = c - r'0' // 编译错误
// 正确:先转换为 UInt32
let diff = UInt32(c) - UInt32(r'0')
// 计算结果可通过 Rune(intValue) 转换回 Rune
let nextChar = Rune(UInt32(c) + 1)
String,Unicode 字符序列'...' 或 "..." 包围。不可含未转义的匹配引号或单独的 \。须在一行内。"""...""" 或 '''...''' 包围。内容从第一个换行后开始。可跨行。支持转义。#"..."#、##'...'## 等。起止 # 数量须匹配。不进行转义处理。Byte(UInt8 别名)且右侧为 ASCII 字符串字面量时,可隐式转换为 ByteRune 且右侧为单字符字符串字面量时,可隐式转换为 Rune"text ${expression} text"${} 中可包含声明和表达式;使用 {} 中的最后一个值+ 用于拼接for (c in s) 迭代的是字节(UInt8/Byte),因为 String 实现了 Collection<Byte>(UTF-8 编码字节序列)for (c in s.runes()) 迭代的是字符(Rune),返回 Iterator<Rune>// c 是 UInt8 类型(字节)
for (c in "你好") { ... }
// c 是 Rune 类型(Unicode 字符)
for (c in "你好".runes()) { ... }
toRuneArray() 方法可将字符串转换为 Array<Rune>Unit()print、赋值、复合赋值、自增/自减、循环==、!=NothingUnit)break、continue、return、throw 表达式的类型return 须在函数体内使用;break/continue 须在循环内使用(T1, T2, ..., TN),最少 2 个元素var 声明的元组变量本身可重新赋值)(e1, e2, ..., eN)t[index],index 为编译时整数字面量,从 0 开始(name: String, price: Int64) — 所有参数须全部具名或全部不具名==/!= 仅在所有元素类型都支持 ==/!= 时可用(a, b) = (1, 2) — 并行赋值(a, b) = (b, a) — 交换_ 忽略某个位置:(a, _) = (3, 4)Array<T> 是 struct 类型,但内部通过引用共享数据 — let arr2 = arr1 后两者共享底层存储,修改互相可见[e1, e2, ...];空数组:[](需要类型上下文)Array<Int64>() — 空数组Array<Int64>(3, repeat: 0) — 3 个元素全为 0Array<Int64>(3, {i => i + 1}) — lambda 初始化arr[i](Int64 索引,从 0 开始);负数或越界 → 编译错误或运行时异常arr[0..5]、arr[..3]、arr[2..](使用 Range)arr[0] = 3,元素可修改.size 属性获取元素数量for (i in arr) 迭代VArray<T, $N>$N 为字面量 Int64 长度;<T, $N> 不可省略T 不能包含引用类型、枚举、lambda(CFunc 除外)或未实例化的泛型var a: VArray<Int64, $3> = [1, 2, 3]VArray<Int64, $5>({i => i}) — lambda 初始化VArray<Int64, $5>(repeat: 0) — 重复初始化a[i] 访问/修改;.size 获取长度Array 的 GC 压力小,但赋值时复制(避免在性能敏感代码中使用大型 VArray)Range<T>(T 须支持关系运算和与 Int64 的加法)start、end(类型 T)、step(Int64,不能为 0)Range<T>(start, end, step, hasStart, hasEnd, isClosed)start..end : step — 不包含 endstart..=end : step — 包含 endstep 省略时默认为 1;step 不能为 0start..end : step 为空:当 step > 0 && start >= end 或 step < 0 && start <= endstart..=end : step 为空:当 step > 0 && start > end 或 step < 0 && start < end=Unit(值为 ())a = b = 0 是语法错误(a, b) = (1, 2);(a, b) = (b, a) 用于交换;_ 忽略| 运算符 | 说明 | 操作数类型 |
|---|---|---|
-(一元) | 取负 | 数值类型 |
+ | 加(也用于字符串拼接) | 相同数值类型 |
- | 减 | 相同数值类型 |
* | 乘 | 相同数值类型 |
/ | 除(整数除法向零截断) | 相同数值类型 |
% | 取模 a - b*(a/b) | 仅整数 |
** | 幂 | Int64^UInt64→Int64,`Float64^(Int64 |
**=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=、|=、&&=、||=
==、!=、<、<=、>、>=
| 运算符 | 说明 | 短路求值 |
|---|---|---|
! | 非(一元前缀) | 不适用 |
&& | 与 | 是:false && x → false |
| ` | ` |
| 运算符 | 说明 |
|---|---|
!(一元) | 按位取反 |
<< | 左移(低位补 0) |
>> | 右移(无符号补 0;有符号正数补 0,负数补 1) |
& | 按位与 |
^ | 按位异或 |
| | 按位或 |
expr++ / expr-- — 仅后缀,仅整数类型expr += 1 / expr -= 1Unit(不能用作值)??Option<T> 解包e1 ?? e2:若 e1 为 Some(v) → v(短路,e2 不求值);若 None → e2?? 的优先级很低(16),低于比较运算符(==/!= 为 10,</> 为 9),混合使用时须加括号:let opt: ?Int64 = 42
let value = 10
// ❌ 错误:?? 优先级低于 !=,实际解析为 opt ?? (default != value)
// if (opt ?? default != value) { ... }
// ✅ 正确:使用括号明确优先级
if ((opt ?? 0) != value) { ... }
.. — 半开区间(左闭右开)..= — 闭区间(左闭右闭): step优先级数值越小,优先级越高。
| 优先级 | 运算符 | 含义 | 结合方向 |
|---|---|---|---|
| 0 | @ | 宏调用 | 右结合 |
| 1 | . [] () | 成员访问、索引、函数调用 | 左结合 |
| 2 | ++ -- ? | 自增、自减、问号操作符 | 无 |
| 3 | ! -(一元) | 按位取反/逻辑非、一元负号 | 右结合 |
| 4 | ** | 幂运算 | 右结合 |
| 5 | * / % | 乘、除、取模 | 左结合 |
| 6 | + - | 加、减 | 左结合 |
| 7 | << >> | 按位左移、右移 | 左结合 |
| 8 | .. ..= | 区间操作符 | 无 |
| 9 | < <= > >= is as | 比较、类型检查/转换 | 无 |
| 10 | == != | 判等、判不等 | 无 |
| 11 | & | 按位与 | 左结合 |
| 12 | ^ | 按位异或 | 左结合 |
| 13 | | | 按位或 | 左结合 |
| 14 | && | 逻辑与 | 左结合 |
| 15 | || | 逻辑或 | 左结合 |
| 16 | ?? | coalescing 操作符 | 右结合 |
| 17 | |> ~> | pipeline、composition | 左结合 |
| 18 | = += -= *= 等 | 赋值、复合赋值 | 无 |
常见陷阱:
??在优先级 16,远低于==/!=(10)和</>(9),因此opt ?? default != value会被解析为opt ?? (default != value),而非(opt ?? default) != value。混用时须加括号。
当需要构建鸿蒙应用项目时,使用此 Skill 执行构建流程。此 Skill 包含完整的构建命令、构建流程说明、构建失败处理流程。构建脚本会自动执行依赖安装、仓颉预编译、资源生成、编译、打包等步骤。
在鸿蒙应用(Cangjie)开发中,当需要使用 stdx 拓展库(如 crypto、encoding、net、log、actors 等),或在构建/链接阶段出现 stdx 相关错误时,使用此 Skill 获取/解压 stdx 包,并指导在 entry/cjpm.toml 中正确配置 bin-dependencies.path-option。
在进行仓颉工程或鸿蒙应用开发时的第一步,应该优先读取该SKILL,用来确定后续的开发步骤。
仓颉语言内置注解。当需要了解仓颉 SDK 提供的内置注解(@sourcePackage/@sourceFile/@sourceLine/@When/@FastNative/@Frozen/@Attribute/@Deprecated)的用途、语法和最优实践时,应使用此 Skill。
仓颉语言附录参考。当需要查阅仓颉语言的关键字列表、运算符优先级与结合性、运算符重载函数签名、运行时环境变量配置、包兼容性规则、TokenKind枚举类型时,应使用此 Skill。
仓颉标准库 Array 类型详细指南。当需要了解 Array 的构造、元素访问、切片、拼接、查找、排序、拷贝、反转、映射、扁平化等操作的完整 API 和用法时,应使用此 Skill。