Ошибка несоответствия типов в VBscript при вызове пользовательской подпрограммы - PullRequest
1 голос
/ 27 апреля 2020

У меня есть эта подпрограмма:

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. Если есть лучший способ сделать это, пожалуйста, дайте мне знать ...:)

1 Ответ

1 голос
/ 27 апреля 2020

Ошибка несоответствия типов - это именно то, о чем она говорит, вы ссылаетесь на тип неправильно или не так, как ожидалось.

Проблема в вызове функции IsNullOrWhiteSpace() в этой строке;

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

вызвано ссылкой на строку как ссылку на объект. Строки не содержат свойств, как это делают типы объектов, поэтому str.Length в коде вызывает ошибку несоответствия типов.

Чтобы проверить длину строки, которую следует использовать;

Len(str)

В этом случае вы, похоже, проверяете массив, поэтому вам следует использовать;

UBound(str)
...