我在函数库中声明了一个二维数组并将其与测试相关联。在测试的 action1 中,我尝试使用“erase”语句清除数组。
我的代码 -
在函数库中,
Dim strVerifyAry(25,6)
在行动1中,
erase strVerifyAry
错误信息
Run Error - Type mismatch: 'Erase'
如何清除这个数组的内容?
我在函数库中声明了一个二维数组并将其与测试相关联。在测试的 action1 中,我尝试使用“erase”语句清除数组。
我的代码 -
在函数库中,
Dim strVerifyAry(25,6)
在行动1中,
erase strVerifyAry
错误信息
Run Error - Type mismatch: 'Erase'
如何清除这个数组的内容?
在普通的 VBScript 中为我工作,所以它很可能是 QTP 用于运行 VBScript 代码的任何引擎的问题。您应该能够模拟这样Erase
的二维数组的行为:
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
我不完全明白为什么,但你可以创建一个像
Public Sub DoErase (byRef Ary)
Erase Ary
End Sub
在库中,并从这样的操作中调用它:
DoErase StrVerifyAry
那行得通。
更新:不,它没有。数组成功传递给DoErase
,DoErase
调用工作正常,但之后的测试仍然可以引用Erase
应该被擦除的数组元素。
如果测试声明了数组,它工作正常(Erase
删除元素)。
这很奇怪,可能与函数库中古怪的作用域有关。
如果您知道这里发生了什么,请告诉我们...
这让我整个下午都发疯了,所以我想发布一个答案以供将来参考。我使用 Split 命令填充了一个数组,然后需要在脚本再次循环执行该过程之前擦除它。我尝试过的任何操作都不会擦除或清除数组,并且下一次使用 Split 只是附加到前面的数组元素中。
通过尝试上面的“array=Nothing”循环,我终于设法生成了一个我研究过的“这个数组是固定的或锁定的”错误。原来我在“For Each..Next”循环中使用了该数组,该循环锁定了该数组,因此无法擦除或清除它。更多信息可在此处获得:
这是一个警察,我知道......不要投票给我!
在某些情况下,您可以使用 Dictionary 集合而不是数组。然后RemoveAll
在您想清除它时使用。当您的数组是由拆分函数或其他什么创建时,这无济于事,但它可以在其他用例中提供帮助。
Set myDict = CreateObject("Scripting.Dictionary")
...
myDict.RemoveAll