跳转到内容

属性

属性把结构化元数据附着到声明、字段、variant、语句或其他受支持的语法节点上。解析器只接受属性形状;每个属性的含义由语义阶段、宿主注册、反射或工具链定义。

属性以 # 开头,使用方括号包裹元数据。参数可以是位置参数或命名参数,值可以是字面量、路径、数组或 map。

#[event("player.level_up")]
pub fn on_level_up(player, amount: i64) {
player.level += amount
}
#[schema(name = "Reward", tags = ["economy", "drop"])]
struct Reward {
code: String
amount: i64
}

属性不会展开代码,也不会在编译期执行任意脚本。它们是事件路由、宿主 schema、反射可见性、诊断和未来工具链使用的元数据。

运行时授予权限时,属性元数据可以被反射查询。如果宿主代码依赖某个公开属性,它就应被视为热更新兼容性表面的一部分。

未知属性是否接受由当前编译器或宿主策略决定。参数形状错误、要求唯一的元数据重复,或属性放在不支持的目标上,都应产生带源码位置的诊断。