能力: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 能力。包括:

进一步阅读