跳转到内容

Map

Map 是动态脚本数据的键值集合,适合配置、查找表和快照值。需要安全修改 Rust 拥有的状态时,应使用注册宿主 schema,而不是把 map 当成宿主模型替代品。

Map<K, V> 是内建参数化 Map 契约。Map key 使用 Vela 的 ValueKey 策略: 不可变叶子值按值比较,脚本堆对象和 host ref 按身份比较,PathProxy 等临时 值会在修改前被拒绝。现有 Map 字面量仍然适合字符串 key,其他 runtime key 值可以通过索引或 Map 方法插入。

Map 字面量使用 { key: value }。key 可以是标识符、字符串、字符、数字或路径。索引用于按 key 读写 entry。

fn reward_table() {
return {
xp: 10i64,
"gold": 5i64,
}
}

常见 map 方法包括插入、移除、包含检查、getget_or。预期缺失的 lookup API 返回 Option

fn add_reward(rewards, code: String, amount: i64) {
let current = rewards.get_or(code, 0)
rewards[code] = current + amount
return rewards
}

直接遍历 Map 和 iter() 都会产生带 keyvalue 字段的 MapEntry record。keys()values()entries() 暴露可重复视图:keys() 返回存储的 原始 key 值,values() 只返回 entry value,entries() 等价于 iter()。 非字符串 key 在遍历时仍保持为带类型的值,不会被字符串化。

fn total(rewards) -> i64 {
let sum = 0
for entry in rewards {
sum += entry.value
}
return sum
}

对宿主路径使用索引可能表示 HostAccess 操作,而不是脚本 map 修改。能力、只读字段、generation 和 schema epoch 仍由宿主 adapter 检查。