能力:Drop
drop
能力是最简单的能力,允许对结构体的实例进行“忽略”或“丢弃”。在许多编程语言中,这被认为是默认行为。然而,在Move中,不允许忽略没有drop
能力的结构体。这是Move语言的一个安全特性,它确保所有资产都得到正确处理。试图忽略没有drop
能力的结构体将导致编译错误。
module book::drop_ability {
/// This struct has the `drop` ability.
public struct IgnoreMe has drop {
a: u8,
b: u8,
}
/// This struct does not have the `drop` ability.
public struct NoDrop {}
#[test]
// Create an instance of the `IgnoreMe` struct and ignore it.
// Even though we constructed the instance, we don't need to unpack it.
fun test_ignore() {
let no_drop = NoDrop {};
let _ = IgnoreMe { a: 1, b: 2 }; // no need to unpack
// The value must be unpacked for the code to compile.
let NoDrop {} = no_drop; // OK
}
}
drop
能力通常在自定义的集合类型上使用,以消除在不再需要集合时的特殊处理需求。例如,vector
类型具有 drop
能力,这使得在不再需要时可以忽略该向量。然而,Move类型系统最大的特点是能够没有 drop
。这确保了资产得到正确处理,而不被忽略。
一个仅具有 drop
能力的结构体称为 Witness。我们在见证和抽象实现部分解释了 Witness 的概念。
带有 drop
能力的类型
Move中的所有原生类型都具有 drop
能力。包括:
标准库中定义的所有类型也都具有 drop
能力。包括:
进一步阅读
- Move参考中的Type Abilities。