调用自定义子程序时 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)
我有这个子程序:
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)