如何在vbscript中清除数组的内容?

如何在vbscript中清除数组的内容?,vbscript,Vbscript,我在函数库中声明了一个二维数组,并将其与一个测试关联起来。在测试的操作1中,我尝试使用“擦除”语句清除数组。 我的代码- 在函数库中 Dim strVerifyAry(25,6) 在行动1中 erase strVerifyAry 错误消息 Run Error - Type mismatch: 'Erase' 如何清除此数组的内容?我不太明白为什么,但您可以创建类似 Public Sub DoErase (byRef Ary) Erase Ary End Sub 在库中,并从操作中调

我在函数库中声明了一个二维数组,并将其与一个测试关联起来。在测试的操作1中,我尝试使用“擦除”语句清除数组。
我的代码-
在函数库中

Dim strVerifyAry(25,6)
在行动1中

erase strVerifyAry
错误消息

Run Error - Type mismatch: 'Erase'

如何清除此数组的内容?

我不太明白为什么,但您可以创建类似

Public Sub DoErase (byRef Ary)
   Erase Ary
End Sub
在库中,并从操作中调用它,如下所示:

DoErase StrVerifyAry
Sub EraseArray(ByRef arr)
  For i = 0 To UBound(arr, 1)
    For j = 0 To UBound(arr, 2)
      If IsObject(arr(i, j)) Then
        Set arr(i, j) = Nothing
      Else
        arr(i, j) = Empty
      End If
    Next
  Next
End Sub
这就行了

更新:不,没有。数组被成功地传递到
DoErase
,并且
DoErase
调用工作正常,但是之后的测试仍然可以引用
Erase
应该擦除的数组元素

如果测试声明了数组,那么它可以正常工作(
Erase
擦除元素)

这很奇怪,可能和函数库中的奇怪作用域有关


如果您发现这里发生了什么,请告诉我们…

在纯VBScript中对我有效,因此QTP运行VBScript代码时使用的任何引擎都很可能存在问题。对于这样的二维数组,您应该能够模拟
Erase
的行为:

DoErase StrVerifyAry
Sub EraseArray(ByRef arr)
  For i = 0 To UBound(arr, 1)
    For j = 0 To UBound(arr, 2)
      If IsObject(arr(i, j)) Then
        Set arr(i, j) = Nothing
      Else
        arr(i, j) = Empty
      End If
    Next
  Next
End Sub
或者像这样,如果您不想将包含对象的字段设置为
Nothing

Sub EraseArray(ByRef arr)
  For i = 0 To UBound(arr, 1)
    For j = 0 To UBound(arr, 2)
      arr(i, j) = Empty
    Next
  Next
End Sub

这让我整个下午都发疯了,所以我想发布一个答案供将来参考。我使用Split命令填充了一个数组,然后需要在脚本再次通过该过程循环之前擦除它。我尝试的任何操作都不会擦除或清除该数组,并且下一次使用的Split只会附加到前面的数组元素中。

通过尝试上面的“array=Nothing”循环,我最终成功地生成了一个我研究过的“thisarrayisfixed或locked”错误。事实证明,我在“For Each..Next”循环中使用了该数组,该循环锁定了该数组,因此它不能被擦除或清除。更多信息可用

我知道这是一种逃避。。。不要投我的票

在某些情况下,可以使用字典集合而不是数组。然后在需要清除时使用
RemoveAll
。当您的数组是由split函数或其他函数创建时,这并没有帮助,但在其他用例中它可以帮助您

Set myDict = CreateObject("Scripting.Dictionary")
...
myDict.RemoveAll

请参阅:

+1以了解其可复制性,但显然不容易解释。我有一个类似的问题,作为解决方法,将数组设置为零,就像它是一个
int
。i、 e.
strerveryAry=0
,然后在我再次需要它时将其重置为数组。QTP使用“真实”MS引擎。然而,我们在别处看到的这些和其他一些奇怪的症状指向了一个方向,即库的全局作用域在某些方面与测试脚本的全局作用域完全分离(GetRef结果并不总是可用的)。我在函数库中创建了一个子函数,没有参数,因为数组是在函数库本身中声明的。而且效果很好。但我仍然不明白为什么从测试中删除时它不起作用。