LlListReplaceList/ja
From Second Life Wiki
メインページ > LlListReplaceList > LlListReplaceList/ja
警告
- start あるいは end が正常なインデックス範囲を外れていても、スクリプトはエラー表示を出さずに処理を続けます。
- start が dest の末尾より大きい場合、src は常に dest の末尾直後に追加されます。start の位置を dest でも保持したい場合、あらかじめ空の要素を dest の末尾に追加しておいてください。同様の結果は 負のインデックス の場合も起こります。
- 関数の呼び出しそのものは、引数の list 変数を変更しません。(戻り値を直接操作するのでないならば) 戻り値を変数へ代入しなければなりません。
• 誤: llListReplaceList(a, ["c"], 2, 2)• 正: a = llListReplaceList(a, ["c"], 2, 2)
- 引数の list 変数に戻り値を再度代入するならば、代入前に list 変数を空にしておくとメモリ節約になります。
• 正: a = llListReplaceList(a, ["c"], 2, 2)• 最善: a = llListReplaceList((a = []) + a, ["c"], 2, 2)
例
default { state_entry() { list a = ["a", "b", "e", "d"]; //2 から始まり 2 で終わる範囲を ["c"] で置き換え、b に代入する list b = llListReplaceList(a, ["c"], 2, 2); //display the change llOwnerSay("\""+llList2CSV(a) + "\" -> \"" + llList2CSV(b)+"\""); //以下のように表示される: "a, b, e, d" -> "a, b, c, d" } }
ノート
範囲とインデックス
インデックス範囲の説明を容易にするため、まず全てのインデックスを正 (プラス) に変換してください。負のインデックスは先頭でなく末尾から数えたもので、負のインデックスは全て対応する正のインデックスを (範囲に収まる限りは) 持ちます。末尾 (最後のインデックス) を過ぎた正のインデックス、先頭 (最初のインデックス) より前の負のインデックスは有効で、その結果は予測可能かつ信頼できます。すなわち、その要素はあたかも存在するかのように扱われますが、それは出力されるまでの間に限ります。
- start <= end の場合、範囲は start から end となります。 [start, end]
- start > end の場合、範囲は 0 から end、および start から -1 となります。 [0, end] + [start, -1]
- end が先頭より前の負のインデックスの場合、範囲は [start, -1] となります。
- end が末尾より後の正のインデックスの場合、範囲は [0, end] となります。
- start と end がいずれも有効な範囲から外れていた場合、関数は処理すべき範囲を持たないことになります。(事実上、関数の呼び出しは無駄になります。)
詳細は負のインデックスを参照してください。正確に言うと、挿入先の list 変数に多くの要素がある必要はありません。角括弧で囲まれた一つの要素からなる list 変数でも構いません。
list TargetList = ["a", "b", "c", "z", "e"]; list InsertList = ["d"];
list 変数中の一個の要素だけを置き換え対象にする場合、そのインデックスを start と end 両方に指定してください。例えば 0, 0 と指定した場合は先頭の要素だけ、7, 7 と指定した場合は 8 番目の要素だけが置き換え対象になります。
llListReplaceList と同様の処理を、一定間隔の飛び石要素について実行する関数については ListStridedUpdate を参照してください。
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。

