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

问题描述 投票:1回答:1

我有一个子程序

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 确实返回一个布尔值! 为什么我会出现这个错误,如何解决这个问题?

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

vbscript asp-classic
1个回答
1
投票

Type Mismatch错误正是它所说的,你引用的类型不正确或不符合预期。

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

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

将字符串引用为对象引用而引起的。字符串并不像对象类型那样包含属性,所以在这一行中的 str.Length 导致类型不匹配错误。

要检查一个字符串的长度,你应该使用。

Len(str)

在这种情况下,你似乎是在检查一个数组,所以你应该使用。

UBound(str)
© www.soinside.com 2019 - 2024. All rights reserved.