원클릭으로
cangjie-struct
仓颉语言结构体。当需要了解仓颉语言的struct定义、构造函数(init/主构造函数)、值语义、成员访问与修改规则、mut函数及其限制等特性时,应使用此 Skill。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
仓颉语言结构体。当需要了解仓颉语言的struct定义、构造函数(init/主构造函数)、值语义、成员访问与修改规则、mut函数及其限制等特性时,应使用此 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-struct |
| description | 仓颉语言结构体。当需要了解仓颉语言的struct定义、构造函数(init/主构造函数)、值语义、成员访问与修改规则、mut函数及其限制等特性时,应使用此 Skill。 |
struct Rectangle {
let width: Int64
let height: Int64
public init(width: Int64, height: Int64) {
this.width = width
this.height = height
}
public func area() { width * height }
}
struct 关键字 + 名称 + {} 体定义static 声明,通过结构体类型名访问(非实例)static init() — 无参数,不允许访问修饰符init(params) { ... }this 消除参数名与成员变量名的歧义init 构造函数仅在构成有效重载时允许let/var),后者同时定义成员变量和构造函数参数struct Rectangle {
public Rectangle(let width: Int64, let height: Int64) {}
}
public init()this 访问实例成员变量。也可访问静态成员static func):通过类型名访问。不能访问实例成员或调用实例函数prop name: Type { get() { ... } } — 只读属性mut prop name: Type { get() { ... } set(v) { ... } } — 读写属性static prop)通过类型名访问cangjie-class Skill 第 4 节| 修饰符 | 可见性 |
|---|---|
private | 仅在结构体定义内 |
internal(默认) | 当前包及子包 |
protected | 当前模块 |
public | 全局可见 |
struct R1 { let other: R1 } // 错误:自引用
struct R2 { let other: R3 } // 错误:相互引用
struct R3 { let other: R2 }
let r = Rectangle(10, 20)r.width、r.area()var(可变)varmut 函数mut 函数 — 特殊的实例成员函数,可以原地修改结构体实例struct Foo {
var i = 0
public mut func g() { i += 1 } // 合法
}
mut 允许使用的位置interface、struct 和结构体扩展中class(类是引用类型,实例函数本身就能修改成员)mut 不能修饰静态函数public mut static func g(): Unit {} // 错误
mut 也可修饰运算符函数public mut operator func +(rhs: A): A { A() } // 合法
mut 函数中 this 的限制this 不能被 Lambda 或嵌套函数捕获this 不能作为表达式使用(如返回值)mut 函数内的 Lambda 捕获mutmutmut 修饰符(mut↔mut, 非mut↔非mut)mut(直接使用普通 func)mut 函数修改的是副本,不影响原始结构体mut 函数使用限制let 声明的结构体变量不能调用 mut 函数let a = Foo()
a.f() // 错误:a 是 let 声明的结构体
var b = Foo()
b.f() // 正确:b 是 var
let c: I = Foo()
c.f() // 正确:c 是接口类型,非结构体类型
mut 函数不能作为一等公民使用var a = Foo()
var fn = a.f // 错误:不能将 mut 函数作为一等公民使用
var b: I = Foo()
fn = b.f // 正确:b 是接口类型
mut 实例成员函数不能调用 mut 函数;mut 函数可以调用非 mut 函数struct Foo {
var i = 0
public mut func f(): Unit {
i += 1
g() // 正确:mut 可调用非 mut
}
public func g(): Unit {
f() // 错误:非 mut 不能调用 mut
}
}