コメント
このコメントは、【トピック】savePlayData関数の呼び出しでエラーへのコメントです。コメントの内容
コメントの内容(一番最初の投稿)
akasata(投稿日:2013/08/05 22:08/05/13)
お待たせしました。
開発担当のdycoonとも相談したのですが、本件はシステム的な対応は難しいと判断しています。
本件は、理論上は対策が可能なのですが、保存データの基本構造に関わる部分を変更しなくてはならず、バグを作りこんでしまう可能性が低くありません。
その場合、他のゲームの保存データが動かなくなってしまうことになり、リスクを考えると手を下すことができません。
本件のように、arr1 -> arr2 -> arr1 -> arr2 ・・・と無限に続いてしまうデータ構造を循環参照と呼びます。
循環参照には定番ともいえる対策があるので、ぜひ、お試しください。
いただいたコードを元に対策例を紹介します。
お手数をおかけし、大変申し訳ありません。
問題解決の一助になりましたら、幸いです。
開発担当のdycoonとも相談したのですが、本件はシステム的な対応は難しいと判断しています。
本件は、理論上は対策が可能なのですが、保存データの基本構造に関わる部分を変更しなくてはならず、バグを作りこんでしまう可能性が低くありません。
その場合、他のゲームの保存データが動かなくなってしまうことになり、リスクを考えると手を下すことができません。
本件のように、arr1 -> arr2 -> arr1 -> arr2 ・・・と無限に続いてしまうデータ構造を循環参照と呼びます。
循環参照には定番ともいえる対策があるので、ぜひ、お試しください。
いただいたコードを元に対策例を紹介します。
arr1 = createArray()
arr2 = createArray()
arr1[0] = "cake"
# 配列への参照ではなく、ラベルを登録します
# ここでは、ラベルには命名規則として接尾語に"_label"をつけます
arr1[1] = "arr2_label"
arr2[0] = "icecream"
# 配列への参照ではなく、ラベルを登録します
arr2[1] = "arr1_label"
setVariable("arr1", arr1)
setVariable("arr2", arr2)
# ラベルから配列を取得する関数です
def get_arr_from_label(label)
# 接尾語の取得
arr = splitString(label, "_")
suffix = popArray(arr)
# 接尾語がlabelの場合
if suffix == "label"
s = joinArray(arr, "_")
return getVariable(s)
else
speak("末尾がlabelじゃないのでエラーです")
end
end
# 実際に使うとき
# arr2_from_arr1とarr2は同じ内容
arr1 = getVariable("arr1")
arr2_from_arr1 = get_arr_from_label(arr1[1])
# arr1とarr1_from_arr2は同じ内容
arr2 = getVariable("arr2")
arr1_from_arr2 = get_arr_from_label(arr2[1])
# ちゃんと値が入っているかどうかチェック
# 配列を表示するのは面倒なので、joinArrayで文字列に変換してしまいます
speak("arr1: " + joinArray(arr1, ", "))
speak("arr2_from_arr1: " + joinArray(arr2_from_arr1, ", "))
speak("arr2: " + joinArray(arr2, ", "))
speak("arr1_from_arr2: " + joinArray(arr1_from_arr2, ", "))
# もちろん、実際に保存してエラーが出ないかチェックしてください
お手数をおかけし、大変申し訳ありません。
問題解決の一助になりましたら、幸いです。
開発担当のdycoonとも相談したのですが、本件はシステム的な対応は難しいと判断しています。
本件は、理論上は対策が可能なのですが、保存データの基本構造に関わる部分を変更しなくてはならず、バグを作りこんでしまう可能性が低くありません。
その場合、他のゲームの保存データが動かなくなってしまうことになり、リスクを考えると手を下すことができません。
本件のように、arr1 -> arr2 -> arr1 -> arr2 ・・・と無限に続いてしまうデータ構造を循環参照と呼びます。
循環参照には定番ともいえる対策があるので、ぜひ、お試しください。
いただいたコードを元に対策例を紹介します。
arr1 = createArray() arr2 = createArray() arr1[0] = "cake" # 配列への参照ではなく、ラベルを登録します # ここでは、ラベルには命名規則として接尾語に"_label"をつけます arr1[1] = "arr2_label" arr2[0] = "icecream" # 配列への参照ではなく、ラベルを登録します arr2[1] = "arr1_label" setVariable("arr1", arr1) setVariable("arr2", arr2) # ラベルから配列を取得する関数です def get_arr_from_label(label) # 接尾語の取得 arr = splitString(label, "_") suffix = popArray(arr) # 接尾語がlabelの場合 if suffix == "label" s = joinArray(arr, "_") return getVariable(s) else speak("末尾がlabelじゃないのでエラーです") end end # 実際に使うとき # arr2_from_arr1とarr2は同じ内容 arr1 = getVariable("arr1") arr2_from_arr1 = get_arr_from_label(arr1[1]) # arr1とarr1_from_arr2は同じ内容 arr2 = getVariable("arr2") arr1_from_arr2 = get_arr_from_label(arr2[1]) # ちゃんと値が入っているかどうかチェック # 配列を表示するのは面倒なので、joinArrayで文字列に変換してしまいます speak("arr1: " + joinArray(arr1, ", ")) speak("arr2_from_arr1: " + joinArray(arr2_from_arr1, ", ")) speak("arr2: " + joinArray(arr2, ", ")) speak("arr1_from_arr2: " + joinArray(arr1_from_arr2, ", ")) # もちろん、実際に保存してエラーが出ないかチェックしてくださいお手数をおかけし、大変申し訳ありません。
問題解決の一助になりましたら、幸いです。