reflect_and_annotation
SKILL.md
仓颉语言反射与注解 Skill
1. 注解
1.1 整数溢出注解
三种内置注解控制函数的溢出策略:
@OverflowThrowing(默认):溢出时抛出ArithmeticException。尽可能在编译时检测@OverflowWrapping:截断高位(模运算)@OverflowSaturating:饱和到类型最小/最大值
可溢出的运算符:+、-、*、/、**、++、--、<<、+=、-=、*=、/=、**=、<<=
1.2 测试框架注解
@EnsurePreparedToMock为静态/顶层声明准备 mock- 仅在
--test/--mock=on编译时允许
1.3 自定义注解
- 通过用
@Annotation标记class创建 - 类不能为
abstract/open/sealed,须提供至少一个const init - 使用方式:
@MyAnnotation[args]应用于类型、成员、构造函数、参数、属性 - 通过
TypeInfo.of(obj).findAnnotation<T>()获取
规则
- 同一注解不能两次应用于同一目标
- 注解不被子类继承
@Annotation[target: [AnnotationKind...]]限制有效目标- 有效目标种类:
Type、Parameter、Init、MemberProperty、MemberFunction、MemberVariable - 参数须为
const表达式 - 无参注解可省略
[]
2. 反射(动态特性)
2.1 TypeInfo
- 核心反射类型
- 获取方式:
TypeInfo.of(instance: Any)— 从实例TypeInfo.of(obj: Object)→ClassTypeInfo— 从对象TypeInfo.of<T>()— 从类型参数TypeInfo.get(qualifiedName)— 从限定名(如"std.socket.TcpSocket")
- 内置类型使用裸名(如
"Int64") - 不能获取未实例化泛型类型的 TypeInfo
2.2 访问成员
- 仅
public成员对反射可见 - 访问变量:
getInstanceVariable(name)/getStaticVariable(name)→getValue()/setValue()
- 访问属性:
getInstanceProperty(name)→getValue(obj)/setValue(obj, val)- 使用
isMutable()检查是否可变
- 调用函数:
getStaticFunction(name, paramTypeInfos...)→funcInfo.apply(typeInfo, [args])
Weekly Installs
2
Repository
kong-baiming/cangjie-devFirst Seen
5 days ago
Installed on
amp1
cline1
opencode1
cursor1
kimi-cli1
codex1