转移政策 - share
vs public_share
, freeze
vs public_freeze
类似于 transfer::transfer
和 transfer::public_transfer
函数,transfer 模块还提供以下功能:
share
和public_share
freeze
和public_freeze
这些函数的工作方式与 transfer
和 public_transfer
类似——只有当传递给它们的对象具有 store
能力时,才能使用 public
版本。
这为开发人员提供了更多的灵活性来控制他们的对象如何被使用。
使用 share
和 public_share
,开发人员可以允许他们的对象仅仅被拥有或者也可以被共享。例如:
- 一个开发人员创建了一个 PunchCard 对象,每次用户购买珍珠奶茶时可以打一个孔。开发人员希望 PunchCard 可以在用户之间共享,
这样不同用户可以使用同一个 PunchCard。他们只需要为 PunchCard 添加
store
能力。 - 另一个开发人员为他们的健身房创建了一个 GymMembership 对象,但不希望会员资格被多个用户共享。
他们只需要不给 GymMembership 添加
store
能力。
使用 freeze
和 public_freeze
,开发人员同样可以决定是否希望所有者能够使他们的对象变为不可变:
- 之前提到的 PunchCard 对象如果用户想放弃,可以将其变为不可变。
- GymMembership 对象不能变为不可变,因为会员资格到期后应该被删除。