0
   dim a;
   a(0)=migration
   a(1)=blue
    a(2)=syntax
   a(3)=green
    dim d;
set d=createobject(scripting.dictionary)
for i=0 to UBOUND(a)
msgbox a(i)
d.add a(i),a(i+1)
next

在 VBSCRIPTING 中,请解释为什么我会收到“错误下标超出范围”以将内容添加到字典中。我必须将数组内容添加到字典

4

2 回答 2

2

Dim a声明了一个普通的 Variant(并将其初始化为 Empty)。您a(i)=whatever(尝试)a用作变体数组。将您的代码更改为:

>> Dim a(3)
>> a(0)="zero"
>> a(1)="one"
>> a(2)="zwei"
>> a(3)="last of four"

(标记引号!和 ; 根本不存在!)以获得有用的固定数组。然后重新考虑(并发布)您希望如何将 tha 数组中的信息转置到字典中 - 就像现在一样,表达式应该抛出错误,因为当 i 到达时a(i+1)不能有 i + 1 元素。aUBound(a)

于 2013-06-05T12:26:33.327 回答
1

Ekkehard.Horner已经指出了导致错误的原因 (+1),但也许需要更多解释。

您有一个包含 4 个元素的数组:

a(0) = "migration"
a(1) = "blue"
a(2) = "syntax"
a(3) = "green"

由于 VBScript 数组是从零开始的,因此该数组的上限为 3。当您像这样在循环中迭代数组时:

For i = 0 To UBound(a)  'remember: UBound(a) == 3
  d.Add a(i), a(i+1)
Next

展开的循环执行以下操作:

d.Add a(0), a(1)
d.Add a(1), a(2)
d.Add a(2), a(3)
d.Add a(3), a(4)

数组的上限是 3,因此尝试访问索引 4 处的元素会导致subscript out of range错误,这基本上意味着您正在尝试访问数组边界之外的数组索引。

如果您的循环处理当前索引之后的元素,则必须在倒数第二个索引处停止处理,即您需要将循环更改为:

For i = 0 To UBound(a)-1
  d.Add a(i), a(i+1)
Next
于 2013-06-05T13:28:55.627 回答