一键导入
cangjie-package
仓颉语言包管理。当需要了解仓颉语言的包声明(package)、程序入口(main)、包导入(import)、重新导出(public import)、顶层访问修饰符(private/internal/protected/public)等特性时,应使用此 Skill
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
仓颉语言包管理。当需要了解仓颉语言的包声明(package)、程序入口(main)、包导入(import)、重新导出(public import)、顶层访问修饰符(private/internal/protected/public)等特性时,应使用此 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-package |
| description | 仓颉语言包管理。当需要了解仓颉语言的包声明(package)、程序入口(main)、包导入(import)、重新导出(public import)、顶层访问修饰符(private/internal/protected/public)等特性时,应使用此 Skill |
main 入口须在其根目录中package pkg1.sub1 声明,须与相对于 src/ 的目录路径匹配src/ 根目录的文件如果没有包声明,则默认为 default 包src
|-- network
| |-- http
| | |-- client.cj // package default.network.http
| | |-- server.cj // package default.network.http
| |-- util.cj // package default.network
|-- main.cj // 可省略包声明,默认为 default 包
// client.cj — 包声明须匹配相对于 src/ 的路径
package default.network.http
public class HttpClient { /* ... */ }
// 错误示例
package a
public class B {} // ❌ 错误:B 与子包 a.B 冲突
main 函数main 是入口点,每个根包最多一个Array<String>Unit 或整数类型func 关键字main 函数示例// 无参 main,返回整数
main(): Int64 {
return 0
}
// 带命令行参数的 main
main(args: Array<String>): Unit {
for (arg in args) {
println(arg)
}
}
// ❌ 错误:返回类型不能是 String
main(): String { return "" }
// ❌ 错误:参数类型只能是 Array<String>
main(args: Array<Int8>): Int64 { return 0 }
import fullPkg.item // 导入单个声明
import fullPkg.{a, b} // 导入多个声明
import fullPkg.* // 导入所有可见声明
import {pkg1.*, pkg2.*} // 同时导入多个包
package 之后、其他声明之前// package pkga
package pkga
public struct R {}
public func f(a: Int32) {}
public func f(a: Bool) {}
// package pkgb
package pkgb
import pkga.*
struct R {} // 本地 R 遮蔽导入的 R
func f(a: Int32) {} // 本地 f(Int32) 遮蔽导入的同签名函数
func bar() {
R() // 使用本地 R
f(1) // 调用本地 f(Int32)
f(true) // 调用导入的 f(Bool),构成重载
}
String、Range 等可用是因为 core 包被自动导入import pkg.name as newName、import pkg as aliasimport fullPkg 用作命名空间限定符// 用 import as 解决名称冲突
import p1.C as C1
import p2.C as C2
main() {
let _ = C1() // 使用 p1 的 C
let _ = C2() // 使用 p2 的 C
}
// 用包名作为命名空间限定符
import p1
import p2
main() {
let _ = p1.C() // 通过包名限定
let _ = p2.C() // 通过包名限定
}
public import、protected import、internal import 重新导出导入的成员private import(默认)将导入限制为文件内可见// package a — 重新导出子包的声明
package a
public import a.b.f // 将 a.b 中的 f 重新导出
public let x = 0
// package a.b
internal package a.b
public func f(): Int64 { 0 }
// 外部包可直接通过 package a 访问 f
import a.f // OK
let _ = f() // OK
// ❌ 错误:包不能被重新导出
public import a.b // Error
| 修饰符 | 当前文件 | 包及子包 | 当前模块 | 全局 |
|---|---|---|---|---|
private | ✓ | ✗ | ✗ | ✗ |
internal(默认) | ✓ | ✓ | ✗ | ✗ |
protected | ✓ | ✓ | ✓ | ✗ |
public | ✓ | ✓ | ✓ | ✓ |
package 声明默认为 publicimport 默认为 privateinternalpublic 声明可在内部(函数体、初始化表达式中)使用非 public 类型Int64 为 publicprivate 声明在导出时可能导致错误package a
private func f1() { 1 } // 仅当前文件可见
func f2() { 2 } // internal:当前包及子包可见
protected func f3() { 3 } // 当前模块可见
public func f4() { 4 } // 全局可见
// ❌ 错误:public 声明不能使用 internal 类型作为参数/返回值
class C {} // 默认 internal
public func f1(a: C): Int64 { 0 } // Error
public let v1: C = C() // Error