自定义类型和能力 - 创建 Castle 结构体
在 Move 中,用户可以使用 struct
关键字创建自定义类型。由 struct
定义的结构体通过允许在其中分组各种数据字段,作为组织数据的基础元素。
在面向对象编程语言中,对象由其属性定义。同样在 Sui 的 Move 中,您可以使用 struct
定义自定义对象。
1. 自定义类型 - struct
现在让我们创建 castle
结构体。在 castle.move
文件中:
module move_castle::castle {
use std::string::{Self, String};
/// The castle struct
public struct Castle {
name: String,
description: String,
serial_number: u64,
}
}
castle
结构体包含三个属性:
name
:城堡的名称description
:城堡的描述serial_number
:城堡的序列号,影响城堡的视觉呈现和核心游戏数据
我们将在后面的课程中使用 castle
结构体创建 Sui 对象,现在我们只介绍结构体本身。
2. 带有能力的类型
在 Sui 的 Move 中,与类型相关的另一个基本概念是能力。每种类型(结构体)最多有四种能力,这些能力定义了该类型对象在 Sui 运行时中的行为。
四种能力是:
copy
- 对象可以被复制或克隆。drop
- 对象可以被销毁。key
- 对象可以通过其对象 ID 进行索引。store
- 对象可以存储在全局存储中。
在 Sui 的 Move 中,具有 key
和 store
能力的自定义类型被认为是资产。例如,NFT 是一种资产,存储在 Sui 的链上存储中,
并且可以在账户之间转移。在我们的例子中,城堡是资产。
因此,我们需要将 castle
结构体修改为:
module move_castle::castle {
use std::string::{Self, String};
/// The castle struct
public struct Castle has key, store {
id: UID,
name: String,
description: String,
serial_number: u64,
}
}
您是否注意到一个特殊字段 id: UID
被添加到 Castle
结构体中?这是必须的:具有 key
能力的结构体的第一个字段必须是 id: UID
,以便在链上存储对象的唯一地址。