动态字段和集合 - 编码俱乐部Sui 系列 #4

在这六个教学视频中的第四个视频中,您将了解在Sui 上对对象进行编程时动态字段和集合的重要性。

动态字段和集合 - 编码俱乐部Sui 系列 #4

Encode ClubSui 系列的第四个视频中,我们将介绍两个非常有用的功能:动态字段和集合。这些功能为Sui的对象数据模型增加了相当大的灵活性。

Sui 基金会与编码俱乐部(Encode Club)合作,提供了六个以开发者为中心的系列视频。该系列视频从Sui 的基础知识到构建智能合约和在Sui 中处理对象的教程。

学习重点

虽然Sui的对象数据模型具有很大的优势,但如何在编程框架中操作和构建这些对象也有其自身的挑战。在Sui 上定义对象时,动态字段和集合这两项功能提供了更大的灵活性。

回顾:物体包装

在Sui 中,对象可以拥有其他对象,但对象包裹另一个对象是另一个概念。

struct A has key {
	id: UID,
	b: B
}

struct B has key, store { id: UID }

在上面的示例中,一个 B 类型的对象被封装成了一个 A 类型的对象。在进行对象封装时,被封装的对象(在我们的示例中为对象 B)并不作为顶层对象存储。因此,无法通过对象 ID 对其进行访问,任何与该对象交互的 API(如通过前端)都无法直接访问对象 B。

这种方法有一些不足之处:

  • 对象有数量有限的字段。这些字段就是结构体声明中的字段。
  • 包裹其他物体的物体可能会变得非常大,从而导致气体费用增加。物体的大小也有上限。
  • 通过对象封装无法存储异构对象(不同类型的对象)集合。由于Move 向量类型必须使用单一类型 T 进行实例化,因此使用向量不支持异构集合。

动态字段

动态字段解决了上述问题。动态字段具有任意名称,可以临时添加和删除。在气体方面,你只需为你访问的内容付费,而不是为你可以访问的内容付费。动态字段还支持异构类型,可以在某个对象中存储不相似的类型。

动态字段有两种:字段和对象字段。字段可以存储任何值。这些字段不是独立的对象,不能通过其 ID 从外部 API 访问。另一方面,对象字段必须在其结构声明中包含 key,store。后者的优点是,对象保持其相同的对象 ID,并且仍然可以从外部 API 读取。

请阅读Sui 关于动态字段的文档,了解更全面的说明。

收藏品

动态字段引入了一种扩展现有对象的方法,而集合则在此基础上更进一步。集合是建立在动态字段之上的,它能提供额外的支持,以计算所包含条目的数量,并防止意外的非空删除。

集合支持同质和异质值。同构集合类型是表。表中存储的所有值必须是同一类型。异构集合类型是 Bag。Bag 中存储的值可以是任何类型。与动态字段和动态对象字段类似,table 和 bag 也提供了纯对象版本:object_table 和 object_bag。table 和 bag 的所有值必须只有 store,而 object_table 和 object_bag 的所有值必须有 key、store。

请阅读Sui 有关集合的文档,了解更全面的说明。

加入我们的越南建造者之家

了解有关Sui 的更多信息,并与其创始人和其他开发人员进行交流!Sui 基金会将于 2023 年 3 月 18 日至 19 日在越南举办下一届 "建设者之家 "活动。届时将举办教育讲座、有奖挑战和其他有趣的活动。

名额有限,先到先得!报名通道现已开启,即刻注册!

观看整个系列

  1. Sui 是什么?
  2. 智能合约
  3. 创建对象和 NFT
  4. 动态字段和集合
  5. RPG 构建基础
  6. 在区块链上部署游戏