원클릭으로
cangjie-function
仓颉语言函数。当需要了解仓颉语言的函数定义、调用、命名参数、默认值、函数类型、Lambda表达式、闭包、嵌套函数、函数重载、运算符重载、尾随Lambda、管道运算符(|>)、组合运算符(~>)、变长参数等特性时,应使用此 Skill。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
仓颉语言函数。当需要了解仓颉语言的函数定义、调用、命名参数、默认值、函数类型、Lambda表达式、闭包、嵌套函数、函数重载、运算符重载、尾随Lambda、管道运算符(|>)、组合运算符(~>)、变长参数等特性时,应使用此 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-function |
| description | 仓颉语言函数。当需要了解仓颉语言的函数定义、调用、命名参数、默认值、函数类型、Lambda表达式、闭包、嵌套函数、函数重载、运算符重载、尾随Lambda、管道运算符(|>)、组合运算符(~>)、变长参数等特性时,应使用此 Skill。 |
func functionName(param1: Type1, param2: Type2): ReturnType {
// 函数体
}
func 开头() 内,逗号分隔: 之后(可选,编译器可推断){} 内p: T — 位置参数,调用时无标签p!: T — 定义时使用 ! 后缀,调用时使用 p: value 形式(调用不需要写!)p!: T = expr — 仅命名参数可有默认值,使用 = 赋值// 函数定义,其中 indent 是命名参数,默认值为 2
func serializePretty(value: JsonValue, indent!: Int64 = 2): String { ... }
// 函数调用,命名参数 indent 使用前缀传值(注意不带 ! 符号)
serializePretty(value, indent: 4)
// 省略命名参数时使用默认值
serializePretty(value) // indent 使用默认值 2
return e 表达式和函数体的最终表达式须为声明类型的子类型Unit,编译器自动在所有返回点插入 return ()return expr:终止执行,返回 expr(须匹配返回类型)return:等价于 return (),须要求 Unit 返回类型return 表达式的类型为 NothingUnitf(arg1, arg2, ..., argn)
add(x, y)paramName: value 语法:add(b: y, a: x)(ParamType1, ParamType2, ...) -> ReturnType-> 右结合() -> Unit — 无参,返回 Unit(Int64, Int64) -> Int64 — 两个 Int64 参数,返回 Int64() -> (Int64, Int64) -> Int64 — 返回一个函数(name: String, price: Int64) -> Unitvar plus: (Int64, Int64) -> Int64 = add // 消除歧义
{ p1: T1, p2: T2 =>
exprs
}
=> 分隔参数和函数体,不可省略(尾随 Lambda 除外){ => exprs }Unit){ a: Int64, b: Int64 => a + b }(1, 2)variableName(args) 调用闭包 = 函数/Lambda + 从其定义(词法)作用域捕获的变量
thisthis 访问实例成员var 的闭包不能逃逸:不能赋给变量、返回、作为参数传递或作为独立表达式 — 只能直接调用f 调用捕获了 var 变量的函数 g(该 var 非 f 的局部变量),则 f 也被视为捕获了 var,不能逃逸var 变量不算捕获 — 访问它们的函数仍为一等值init:不同参数 → 重载class Parser {
// 错误:不能同时定义同名的实例方法和静态方法
// public func parse(): Result { ... }
// public static func parse(source: String): Result { ... }
}
public operator func +(right: Point): Point { ... }
public operator func -(): Point { ... } // 一元运算符
func 前使用 operator 修饰符this)this)static,不能 为泛型()、[]、!、-(一元)、**、*、/、%、+、-(二元)、<<、>>、<、<=、>、>=、==、!=、&、^、|
[]operator func [](args...): ReturnType — 仅非命名参数operator func [](args..., value!: T): Unit — 须有唯一命名参数 value!,无默认值,返回 Unit()operator func ()(params): ReturnType — 任意参数/返回类型this() 或 super() 调用(它们始终引用构造函数)+=、-= 等),前提是返回类型与左操作数类型匹配或为其子类型Int64 的 +)myIf(true) { 100 }
f { i => i * i }
=> 可省略|>e1 |> e2 等价于 let v = e1; e2(v)e2 须为函数类型表达式;e1 的类型须为 e2 参数类型的子类型arr |> inc |> sum~>f ~> g 等价于 { x => g(f(x)) }f 和 g 须为单参数函数f 的返回类型须为 g 的参数类型的子类型Array<T> 时,调用者可直接传递 0 个或多个值(而非数组字面量):
func sum(arr: Array<Int64>) { ... }
sum(1, 2, 3) // 脱糖为 sum([1, 2, 3])
~>、|>