属性
属性把结构化元数据附着到声明、字段、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}元数据,不是宏
Section titled “元数据,不是宏”属性不会展开代码,也不会在编译期执行任意脚本。它们是事件路由、宿主 schema、反射可见性、诊断和未来工具链使用的元数据。
反射和热更新
Section titled “反射和热更新”运行时授予权限时,属性元数据可以被反射查询。如果宿主代码依赖某个公开属性,它就应被视为热更新兼容性表面的一部分。
未知属性是否接受由当前编译器或宿主策略决定。参数形状错误、要求唯一的元数据重复,或属性放在不支持的目标上,都应产生带源码位置的诊断。