ネタ元 → vbでボタンを押すと数字が増える
スコープだスコープ。変数の有効範囲つか束縛範囲つか。
Module Module1
Sub Main()
Dim data() As Integer = {1, 2, 3, 4, 5}
For Each item As Integer In data
Console.Write("{0} ", item)
Next
Console.WriteLine()
End Sub
End Module
このとき、itemの有効範囲は For Each 内であるな。
それが証拠に
Module Module1
Sub Main()
Dim data() As Integer = {1, 2, 3, 4, 5}
For Each item As Integer In data
Console.Write("{0} ", item)
Next
Console.WriteLine(item) ' error! : itemなんか知らなぁい
End Sub
End Module
となるからね。ところが
Module Module1
Sub Main()
Dim data() As Integer = {1, 2, 3, 4, 5}
For Each item As Integer In data ' error: itemがカブるよ
Console.Write("{0} ", item)
Next
Console.WriteLine()
Dim item As Integer ' ここでitem宣言
End Sub
End Module
とか書くと For Each のトコで、itemがカブるからエラー! だと。
つまり Dim item した時点でその有効範囲が Dim より前に及んでしまう。
そいじゃってんで
Module Module1
Sub Main()
item = 2 ' error: 宣言する前に使うなよ!
Dim data() As Integer = {1, 2, 3, 4, 5}
For Each item As Integer In data ' error: itemがカブるよ
Console.Write("{0} ", item)
Next
Console.WriteLine()
Dim item As Integer ' ここでitem宣言
End Sub
End Module
「宣言する前に使うな」なんてエラソーなこと言うんなら、
For Each んトコではまだ宣言されてないんだからカブりゃせんじゃない。
わけわかんない。納得のいく説明を求ム > VBなひと。