删除对象

删除对象分为两个步骤:

  1. 解包对象并检索其 ID。
  2. 删除对象 ID。

1. 解包

有一种特定的方法来解包对象:

public struct Demo has key, store {
    id: UID,
    value: u64,
}

entry fun destroy(demo: Demo) {
    // 1. 解包对象。
    let Demo {id, value: _} = demo;
}

在解包时检索对象 ID,_ 符号表示忽略从解包中接收 value 字段。_ 还通常用于忽略多值返回函数的返回值:

// 计算和与积。
fun calculate(a: u64, b:u64): (u64, u64) {
    (a + b, a * b)
}

fun call() {
    // 只想使用 calculate 函数结果中的和。
    let (sum, _) = calculate(1, 2);
}

2. 删除对象 ID

由于我们从解包中检索到了对象 ID,使用 object::delete 删除 ID,然后 Demo 对象就被删除了。

完整的删除对象函数应为:

entry fun destroy(demo: Demo) {
    // 1. 解包对象。
    let Demo {id, value: _} = demo;
    // 2. 删除对象 ID。
    object::delete(id);
}