仓颉小智实践清单:数字、字符串、元组、数组与Option可选类型完全解析(附可运行示例)
2026/9/24 14:49:04 网站建设 项目流程

仓颉小智实践清单:数字、字符串、元组、数组与Option可选类型完全解析(附可运行示例)

【免费下载链接】仓颉小智项目地址: https://gitcode.com/Cangjie-TPC/cangjiexiaozhi

仓颉小智(Cangjie-TPC / cangjiexiaozhi)是一个基于大模型 + RAG 知识库的仓颉语言智能助手,本仓库通过 docs/dev_guide.md 等文档为模型提供仓颉语言开发知识库,并配套 IDEA 插件 plugins/idea/。本文从新手视角出发,带你一次性吃透仓颉语言最基础的 5 类核心数据类型:数字、字符串、元组、数组与 Option 可选类型,并附上可直接运行的示例代码。

数字类型:整数与浮点数的正确打开方式 🧮

仓颉的整数分为有符号Int8~Int64IntNative)和无符号UInt8~UInt64UIntNative),完整表示范围见整数类型章节。浮点数则提供Float16Float32Float64三种精度。

新手记忆清单:

  • 整数字面量无类型上下文时,默认推断为Int64,无需手动转换
  • 支持二进制(0b)、八进制(0o)、十六进制(0x)前缀,还可用_分隔位数
  • 可用后缀精确指定类型:100i8(Int8)、0x10u64(UInt64)、3.14f32(Float32)
var x = 100i8 // Int8 var y = 0x10u64 // UInt64,值为 16 var z = 0o432i32 // Int32,值为 282 let a: Float32 = 3.14 let e: Float64 = 0x1p2 // 十六进制浮点,值为 4.0

💡 提示:值超出类型范围时编译器会直接报错,例如let x: Int8 = 128是非法的,这能帮你提前发现溢出隐患。

更多字面量细节可查阅浮点类型章节。

字符串类型:三种字面量与 ${} 插值一步到位 📝

仓颉的String由 Unicode 字符组成,支持单行多行多行原始三种字面量,字符类型则叫Rune。最实用的特性是插值字符串:用${}直接把表达式嵌进字符串,告别繁琐拼接。

let s1 = 'Hello Cangjie Lang' // 单行字面量 let s2 = ''' Hello, Cangjie Lang''' // 多行字面量 let s3 = ##'#'\n'## // 多行原始字面量,\n 不会被转义 let fruit = "apples" let count = 10 println("There are ${count * count} ${fruit}") // 输出:There are 100 apples

常用操作包括判等(==)、拼接(+)、contains判断包含、split按分隔符拆分等:

let s1 = "abc" let s2 = "ABCabc" println(s2.contains(s1)) // true println(s2.split(s1)[1]) // ABC 与 abc 之间的空串

字符串的完整操作列表参见字符串类型章节。

元组类型:把不同类型"打包"成不可变组合 📦

元组(Tuple)能把多个不同类型组合成一个新类型,写作(T1, T2, ..., TN)至少是二元长度固定整体不可变(可整体替换,不能改单个元素)。

var pi = (3.14, "PI") println(pi[0]) // 3.140000 println(pi[1]) // PI // 元组可给元素标记类型参数名,提升可读性 func getFruitPrice(): (name: String, price: Int64) { return ("banana", 10) }

实践要点:

  • t[0]t[1]这类常量下标访问元素,下标必须是字面量
  • 类型参数名(如nameprice)只能全部写或全不写,不能混用
  • 函数返回多个值时,元组是天然的"轻量返回结构"

元组规则详见元组类型章节。

数组 Array:字面量初始化与 Lambda 构造 📊

仓颉用Array<T>表示有序同类型序列,用方括号字面量即可初始化,编译器会自动推断元素类型:

var a: Array<Int64> = [0, 0, 0, 0] let b = [1, 2, 3, 3, 2, 1] // 自动推断为 Array<Int64> let c = Array<Int64>(3, repeat: 0) // 长度 3,元素全为 0 let d = Array<Int64>(3, {i => i + 1}) // 用 Lambda 初始化,元素为 1、2、3

遍历用for-in,取长度用size属性(无需括号):

main() { let arr = [0, 1, 2] for (i in arr) { println("The element is ${i}") } println("The size of array is ${arr.size}") }

如果长度需要动态变化,使用ArrayList<T>(需import std.collection.ArrayList)。数组的完整用法见数组类型章节。

Option 可选类型:彻底告别"空值恐慌" 🔒

Option<T>是仓颉的泛型枚举,只有两个构造器:Some(T)表示有值、None表示无值。Option<T>也可简写为?T

let a: Option<Int64> = Some(100) let b: ?Int64 = None let c: Option<String> = "100" // 上下文已知为 Option 时可直接赋值 let d = None<Int64> // 无类型上下文时用 None<T> 显式指定

仓颉提供了 4 种解构 Option 的常用姿势:

方式写法说明
模式匹配match (a) { case Some(x) => ... case None => ... }显式区分有值/无值
合并操作符a ?? 0None时返回默认值
问号操作符a?.toString()链式安全访问,中间任一环节为None则整体为None
getOrThrowa.getOrThrow()有值返回值,None时抛异常

一个贴近实际的小例子——安全处理可能缺失的年龄:

main() { let age: ?Int64 = None let result = age ?? 18 // 兜底默认值 println(result) // 18 let opt = Some(5) match (opt) { case Some(x) => println("年龄是 ${x}") case None => println("年龄未知") } }

Option 的完整定义与用法参见Option 类型与使用 Option两个章节。

新手速查清单 ✅

  • 数字:默认Int64;后缀i8/u64/f32等可精确指定类型
  • 字符串${}插值 +contains/split覆盖 90% 日常需求
  • 元组(a, b)打包异构数据,下标必须为常量字面量
  • 数组[1, 2, 3]字面量最快;动态场景用ArrayList<T>
  • Option:用?T声明可空值,用???.match安全解构

以上示例均整理自仓颉语言开发指南,如需查询标准库 API 可继续参考cangjie_std_doc.md、cangjie_tools_doc.md,IDEA 插件源码在 plugins/idea/xiaozhi/src/main/kotlin/。建议把这些类型知识直接喂给仓颉小智知识库,让 AI 助手在写代码时输出更规范的仓颉代码 🚀

【免费下载链接】仓颉小智项目地址: https://gitcode.com/Cangjie-TPC/cangjiexiaozhi

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询