Moveの型システムは、型の能力(Type abilities) をカスタマイズすることが可能で、これは独特の特徴です。前のセクションでは、構造体 (Struct) の定義とその使用方法について紹介しましたが、Artist および Record 構造体のインスタンスはコンパイルするためにアンパックする必要がありました。これは能力がない構造体のデフォルトの挙動です。

本書を通じて、Ability: <name> という名前の章を見ることができます。ここで <name> は能力の名前です。これらの章では、その能力について詳しく解説し、Moveでの使用方法を説明します。

能力とは何か?

能力は、型に特定の挙動を許可する方法です。これは構造体宣言の一部であり、構造体のインスタンスに許可される挙動を定義します。

能力の構文

能力は、構造体定義で has キーワードの後に能力のリストを指定して設定されます。能力はカンマで区切られます。Moveは copy / drop / key / store の4つの能力をサポートしており、それぞれが構造体インスタンスの特定の挙動を定義するために使用されます。

/// この構造体は `copy` と `drop` の能力を持っています。
struct VeryAble has copy, drop {
    // field: Type1,
    // field2: Type2,
    // ...
}

能力の概要

能力のクイックオーバービューです:

すべての組み込み型(参照を除く)は copydropstore の能力を持っています。参照は copydrop を持っています。

ここでそれらについて言及することは重要ですが、各能力についての詳細は次の章で説明し、それらをどのように使用するかについて適切な文脈を提供します。

能力のない構造体

能力のない構造体は、破棄も、コピーも、ストレージに保存もできません。このような構造体を*ホットポテト(Hot Potato)*と呼びます。これは冗談のように聞こえますが、能力のない構造体はホットポテトのように、回り回って特別な取り扱いが必要であることを覚えておくのに良い方法です。「ホットポテト」はMoveの最も強力なパターンの一つであり、その詳細については Hot Potato章で説明します。

参考文献