bは変えていないのに・・・(バグ報告掲示板)
投稿:
ikosami
投稿:2012/01/09 23:43:09(最新:2012/01/10 17:36:10)
ikosami
投稿:2012/01/09 23:43:09(最新:2012/01/10 17:36:10)
順番を入れ替えるスクリプトで、
下記のようにすると、bの値は変えていないのにもかかわらず
なぜか影響を受けています・・・
ツイート
下記のようにすると、bの値は変えていないのにもかかわらず
なぜか影響を受けています・・・
a = createArray()
a[0] = "一"
a[1] = "ニ"
a[2] = "三"
#↓ b="一","ニ","三"
b = a
z = createArray()
z[0] = 0
z[1] = 2
z[2] = 1
speak("b=",b,"before")
i = 0
while i < 3
c = z[i]
a[i] = b[c]
i = i + 1
end
speak("b=",b,"after")
speak("a=",a,"\nb=",b)
コメントする
コメントするには、ログインする必要があります。
コメント一覧
よくある誤解認識ですね。
一見、bは「aの配列の内容」を
コピーしているようかに見えますが、
実際は、bに「aという配列」をコピーしています。
そのため、aの値が変更されると、
bの内容は「aという配列」ですので
bの内容も変更されます。
正常に動作させるためには
bも新たに配列として定義した後
1つずつ、コピーする必要があります。
一見、bは「aの配列の内容」を
コピーしているようかに見えますが、
実際は、bに「aという配列」をコピーしています。
そのため、aの値が変更されると、
bの内容は「aという配列」ですので
bの内容も変更されます。
正常に動作させるためには
bも新たに配列として定義した後
1つずつ、コピーする必要があります。
a = createArray()
a[0] = "一"
a[1] = "ニ"
a[2] = "三"
#↓ b="一","ニ","三"
#b = a
b = createArray()
b[0] = a[0]
b[1] = a[1]
b[2] = a[2]
z = createArray()
z[0] = 0
z[1] = 2
z[2] = 1
speak("b=",b,"before")
i = 0
while i < 3
c = z[i]
a[i] = b[c]
i = i + 1
end
speak("b=",b,"after")
speak("a=",a,"\nb=",b)
メニュー
ありがとうございます。