调用自定义子程序时 VBscript 中出现类型不匹配错误

Type mismatch error in VBscript when calling a custom subroutine

我有这个子程序:

Sub AssertTrue(condition, success, error)
    If condition Then
        %><div style='color:black'><%=success%></div><%
    Else
        %><div style='color:red'><%=error%></div><%
    End If
End Sub

当我这样称呼它时:

AssertTrue IsNullOrWhiteSpace(Empty), "Empty is blank.", "Empty is not blank."

使用此功能:

' Determines if a string is null, blank, or filled with whitespace.
' If an array of strings is passed in, the first string is checked.
Function IsNullOrWhiteSpace(str)
    If IsArray(str) Then
        If str.Length > 0 Then str = str(0) Else str = Empty
    End If
    IsNullOrWhiteSpace = IsEmpty(str) Or (Trim(str) = "")
End Function

然后我在 AssertTrue 调用中收到类型不匹配错误。但是 VBscript 是一种弱类型语言,我看不出类型在哪里混淆 - IsNullOrWhiteSpace 确实是 return 布尔值!为什么会出现此错误,我该如何解决?

是的,我正尝试在 VBscript 中创建单元测试。如果有更好的方法,请告诉我... :)

类型不匹配错误正是它所说的,您引用的类型不正确或不符合预期。

问题出在IsNullOrWhiteSpace()函数调用,这一行;

If str.Length > 0 Then str = str(0) Else str = Empty

由将字符串引用为对象引用引起。字符串不包含对象类型等属性,因此代码中的 str.Length 导致类型不匹配错误。

要检查您应该使用的字符串的长度;

Len(str)

在这种情况下,虽然您似乎正在检查数组,但您应该使用;

UBound(str)