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,
// ...
}
能力のクイックオーバービューです:
すべての組み込み型(参照を除く)は
copy
、drop
、store
の能力を持っています。参照はcopy
とdrop
を持っています。
copy
- 構造体をコピーすることを許可します。Ability: Copy 章で説明します。drop
- 構造体を破棄することを許可します。Ability: Drop 章で説明します。key
- 構造体をストレージのキーとして使用することを許可します。Ability: Key 章で説明します。store
- 構造体を key
能力を持つ構造体に保存することを許可します。Ability: Store 章で説明します。ここでそれらについて言及することは重要ですが、各能力についての詳細は次の章で説明し、それらをどのように使用するかについて適切な文脈を提供します。
能力のない構造体は、破棄も、コピーも、ストレージに保存もできません。このような構造体を*ホットポテト(Hot Potato)*と呼びます。これは冗談のように聞こえますが、能力のない構造体はホットポテトのように、回り回って特別な取り扱いが必要であることを覚えておくのに良い方法です。「ホットポテト」はMoveの最も強力なパターンの一つであり、その詳細については Hot Potato章で説明します。