global / save(永続化)

global はゴースト全体で共有される変数です。 global save.… のように save の下に置いた値だけが、ゴーストを閉じても残ります。 データは save.json に自動的に保存・読み込みされます(保存されるのはゴーストの終了時と再読み込み時です)。

save 以外に置いた値(global foo = 5 や global work.x = 1 など)は、ゴーストを起動しているあいだだけ他のトークから見えますが、save.json には保存されず、終了すると消えます。 save.json に残したい値には、必ず save. を付けてください。書き忘れてもエラーは出ません。

基本的な書き方

OnBoot => {
    global save.訪問回数 += 1
    湊: ${save.訪問回数}回目の起動です。
}

save. の後にキー名を書きます。 初回は null から始まるので、+= で数値を足すと自動的に数値として扱われます。

初期値を設定する

?= を使うと、値が null のときだけ代入します。 初期化に便利です。

OnBoot => {
    global save.訪問回数 ?= 0
    global save.訪問回数 += 1
    湊: ${save.訪問回数}回目の起動です。
}

代入演算子一覧

演算子意味
=代入
+=加算して代入
-=減算して代入
*=乗算して代入
/=除算して代入
%=剰余を代入
?=nullのときだけ代入

ネストしたデータ

マップをネストして構造化できます。

OnBoot => {
    global save.stats.win += 1
    湊: ${save.stats.win}勝しました。
}

配列の保存

OnBoot => {
    global save.履歴 ?= []
    global save.履歴 = push(save.履歴, "起動")
    湊: 履歴に追加しました。
}

letとglobalの違い

letglobal save.…global(save 以外)
スコープトーク内(ブロック内)のみゴースト全体ゴースト全体
永続化されないsave.json に保存されない(終了で消える)
用途一時的な計算訪問回数・フラグ等起動中だけ共有したい値