能力:丟棄 (Abilities: Drop)
drop 能力 — 最簡單的一種 — 允許結構實例被 忽略 或 丟棄。在許多程式語言中,這種行為被認為是預設的。然而,在 Move 中,不允許忽略沒有 drop 能力的結構。這是 Move 語言的一項安全功能,確保所有資產都得到正確處理。嘗試忽略沒有 drop 能力的結構將導致編譯錯誤。
module book::drop_ability;
/// 此結構具有 `drop` 能力。
public struct IgnoreMe has drop {
a: u8,
b: u8,
}
/// 此結構沒有 `drop` 能力。
public struct NoDrop {}
#[test]
// 建立 `IgnoreMe` 結構的實例並忽略它。
// 即使我們構造了該實例,我們也不需要解構它。
fun test_ignore() {
let no_drop = NoDrop {};
let _ = IgnoreMe { a: 1, b: 2 }; // 不需要解構
// 該值必須被解構才能使程式碼編譯。
let NoDrop {} = no_drop; // 確認
}
drop 能力常用於自定義集合類型,以消除在不再需要集合時對其進行特殊處理的需求。例如,vector 類型具有 drop 能力,這允許在不再需要時忽略向量。然而,Move 類型系統最大的特色在於可以 不具備 drop。這確保了資產被正確處理,而不是被忽略。
僅具有 drop 能力的結構被稱為 見證者 (Witness)。我們在 見證者與抽象實作 章節中解釋了 見證者 (Witness) 的概念。
具有 drop 能力的類型
Move 中的所有原生類型都具有 drop 能力。這包括:
標準庫中定義的所有類型同樣也具有 drop 能力。這包括:
延伸閱讀
- Move 參考手冊中的 類型能力。