在之前的课程中,我们讨论了两种可以通过用户交易传递给函数的对象参数类型:不可变引用 &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对象