如何在VBScript中声明全局数组
问题描述:
我试图存储一个数组值,以便在Sub被多次调用时可以重用。 如果存在值,我想阻止将值重新赋值给数组。如何在VBScript中声明全局数组
我的代码是这样的。
Dim views()
Sub runit()
For i=0 To 3
test()
Next
End Sub
Sub test()
ReDim Preserve views(0)= "test"
' - other codes that I want to run-
End Sub
我得到“类型不匹配:'chosenviews'”错误。
如果我在“Sub test”里面移动“Dim views()”,我不会收到错误。 如何在VBScript中声明全局数组? 如果这是不可能的,是否有任何方法来防止调用Sub时重新分配数组?
以下代码不起作用,但您可能会明白我正在尝试做什么。
Dim views()
Sub runit()
For i=0 To 3
test()
Next
End Sub
Function IsArrayDimmed(arr)
IsArrayDimmed = False
If IsArray(arr) Then
On Error Resume Next
Dim ub : ub = UBound(arr)
If (Err.Number = 0) And (ub >= 0) Then IsArrayDimmed = True
End If
End Function
Sub test()
If IsArrayDimmed(views) Then
Else
ReDim Preserve views(0)= "test"
End If
' - other codes that I want to run-
End Sub
谢谢你的帮助。
答
如果我理解正确,看起来好像要声明一个全局数组变量,然后将项添加到该数组中,而不限于静态数量的元素。换句话说,您需要通过重新分配来动态增加数组的大小。
全局声明是正确的,属于的地方你知道了:
Dim views()
你写在这里是不正确的语法,你不能在同一时间:
ReDim Preserve views(0)= "test"
分配一个值,使用ReDim什么
此外,这将ReDim数组大小0,这是你想要的相反。
如果你希望“推”该数组中的值,你应该使用这样的函数,其处理REDIM增加值到数组的尾部之前增加数组的大小:
Function Push(ByRef arrTarget, ByVal varValue)
Dim intCounter
Dim intElementCount
ReDim Preserve arrTarget(UBound(arrTarget) + 1)
If (isObject(varValue)) Then
Set arrTarget(UBound(arrTarget)) = varValue
Else
arrTarget(UBound(arrTarget)) = varValue
End If
Push = arrTarget
End Function
使用方法如下:
Call Push(views,"test")
答
任何变量在全球范围内实例化将是一个“全局”变量。但是,如果您希望在原始范围内保留任何更改,则应该“通过引用”将该变量显式传递给其他范围。您可以使用Function或Sub声明中的ByRef keword来完成此操作。
Sub test(ByRef viewsArray)
现在测试中您将引用viewsArray充当指针的意见。