Abilities: Copy
在 Move 中,类型的复制能力表示该类型的实例或值可以被复制。虽然在处理数字或其他简单类型时这种行为可能感觉非常自然,但它并不是 Move 中自定义类型的默认行为。这是因为Move旨在表达数字资产和资源,而无法复制是资源模型的关键要素。
但是,移动类型系统允许您定义具有复制功能的自定义类型。
public struct Copyable has copy {}
在上面的示例中,a 被隐式复制到 b,然后使用解引用运算符显式复制到 c。如果 Copyable 不具备复制能力,则代码将无法编译,并且 Move 编译器将引发错误。
let a = Copyable {};
let b = a; // `a` is copied to `b`
let c = *&b; // explicit copy via dereference operator
let Copyable {} = a; // doesn't have `drop`
let Copyable {} = b; // doesn't have `drop`
let Copyable {} = c; // doesn't have `drop`
复制能力与掉落能力密切相关。如果一个类型具有复制能力,那么它很可能也应该具有复制能力。这是因为当不再需要实例时需要删除能力来清理资源。如果类型只有副本,则管理其实例会变得更加复杂,因为不能忽略值。