在之前的课程中,我们讨论了两种可以通过用户交易传递给函数的对象参数类型:不可变引用 &ObjectStruct 用于从对象读取数据, 以及可变引用 &mut ObjectStruct 用于修改对象。还有第三种对象参数类型可以传递给入口函数 —— 对象值,该对象值可用于从Sui存储中删除对象:

module modules::ticket_module_12 {
  use sui::clock::{Self, Clock};
  use sui::object::{Self, UID};
  use sui::transfer;
  use sui::tx_context::TxContext;
 
  public struct Ticket has key {
      id: UID,
      expiration_time: u64,
  }
 
  public fun clip_ticket(ticket: Ticket) {
     let Ticket {
         id,
         expiration_time: _,
     } = ticket;
     object::delete(id);
  }
}

在上面的例子中,我们添加了一个新的函数clip_ticket,该函数将一个Ticket对象作为参数并删除它。 我们没有传递该对象的可变引用,因为我们并不打算修改它。而是传递整个Ticket结构体,这样我们可以删除它:

  • 使用 let Ticket { id, expiration_time: _ } = ticket 解构Ticket结构体
  • 使用 object::delete(id) 销毁Ticket对象