之前,我们编写了一个简单的票务应用程序,该应用程序创建具有到期时间的票。现在让我们引入一个单独的函数来读取这个expiration_time字段并检查票是否已过期:
module modules::ticket_module_05 {
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 is_expired(ticket: &Ticket, clock: &Clock): bool {
ticket.expiration_time >= clock::timestamp_ms(clock)
}
}
要读取Ticket
对象(object)的数据,上述的is_expired函数接收一个对Ticket对象的不可变引用。
Move区分引用和对象值。当我们只需要在 is_expired
中读取现有票的状态时,
我们便使用引用,而不应该重新创建或复制整个票。这类似于电子票,
你可以在手机和笔记本电脑上有多个副本,但它们都指向同一张票。不可变引用只是意味着你不能更新相关结构体(struct)的字段,
其以为&StructName
类型来表示。请注意,is_expired还接收一个Clock对象引用(&Clock)。这是另一个自动参数,类似于系统传递的TxContext
。
我们稍后会详细介绍这一点。