プレイ日記
だにえる haru2016nen
DEFの返り値も参照されるっぽい。 グローバル変数返したい時でも ローカル変数にCOPYとか しないとダメなのかな…。
18そうだね
プレイ済み
返信[1]
親投稿
Haru HaruMMLdaisuki
髪染めました?
2そうだね
プレイ済み
返信[2]
親投稿
MIKI ifconfig
てか、配列変数って、だにえるさんの考える「参照」でしか扱われないと思っていいんじゃないかな。 どこかにも書いたけど、配列は連番を振ったロッカーの一部を使えるようにするものです。 var v[8] という文を実行すると、配列vには例えばロッカーの1000番から1007番が割り当てられます。 配列でない通常の変数は「値」を持ちますよね。 var s: s=3.14 この文を実行すると変数sの値は3.14になります。 一方で配列はというと、「値」の代わりに、ロッカー番号を保持しています。 上の例では、vという変数というか識別子は、値の代わりに「1000番」という番号を保持しているわけです。 test0% が返すのはグローバル配列 b% が保持しているロッカー番号。 test2%及びtest3% が返すのはそれぞれのローカル変数 l_o% が保持しているロッカー番号(ただしそのロッカー群に
1そうだね
プレイ済み
返信[3]
親投稿
MIKI ifconfig
続き: (ただしそのロッカー群には b% の値がコピーされている)
1そうだね
プレイ済み
返信[4]
親投稿
だにえる haru2016nen
やっぱり、 DEFで配列を返す場合は 返した配列が参照されないために、 (グローバル配列の場合は 先にをCOPYしてから) ローカル配列を返した方が よさそうですね。 ちなみに、 スロットが違くても 参照はされるようです。
0そうだね
プレイ済み
返信[5]
親投稿
MIKI ifconfig
関数の戻り値である配列に対して、 読むだけ(つまり参照先をいじらない)であれば copy は不要 書きこみすると参照先も変更してしまうので、参照先をいじりたくないのであれば copy すべし ってことになります。
1そうだね
プレイ済み
返信[6]
親投稿
MIKI ifconfig
あと、空でない配列変数に代入するのは、 「今持っているロッカー群を解放する」 手間がかかるので、とても遅くなります。 (どこかのトピで ish さんが実証してたやつ) (どこかで私が解説した a$=a$+b$ が inc a$,b$ より遅くなるのと同じ原理) def で copy した配列を返すくらいなら 引数の配列に直接 copy した方が圧倒的に速い。
1そうだね
プレイ済み