キー(keyアビリティにより可能となるトップレベルのストレージ機能について理解してもらったところで、リストにおける最後のアビリティ「ストア(store)」について説明しよう。

定義

ストア(store)は、タイプをオブジェクト内に保存することを可能とする特別なアビリティである。このアビリティは、キー(key)アビリティを持つ構造体におけるフィールドとしてタイプを使用するのに必要である。別の言い方をすれば、ストア(store)アビリティは値をオブジェクト内にラップすることを可能とする。

<aside> 💡 ストア(store)アビリティはトランスファー操作の制限も緩和する。それについては、制限付きトランスファーと公開トランスファーの章で詳しく説明する。

</aside>

前章では、すでにキー(key)アビリティを持つタイプを使用してきた。すべてのオブジェクトはUIDフィールドを持たねばならず、例においても使用した。また、コンフィグ(Config)構造体の一部としてストラブル(Storable)タイプも使用した。コンフィグ(Config)タイプにはストア(store)アビリティも備わっている。

/// This type has the `store` ability.
public struct Storable has store {}

/// Config contains a `Storable` field which must have the `store` ability.
public struct Config has key, store {
    id: UID,
    stores: Storable,
}

/// MegaConfig contains a `Config` field which has the `store` ability.
public struct MegaConfig has key {
    id: UID,
    config: Config, // there it is!
}

ストアアビリティを持つタイプ

Moveにおけるすべてのネイティブタイプ(参照を除く)はストア(store)アビリティを持っている。これには以下が含まれる:

標準ライブラリにおいて定義されるすべてのタイプもストア(store)アビリティを持っている。これには以下が含まれる: