Как инициализировать несколько переменных вместе?

Мне нужно инициализировать несколько переменных с одинаковым значением в VBScript. Например, я могу найти только один способ x = 5 : y = 5 : z = 5, Есть ли способ, похожий на x = y = z = 5?

2 ответа

Решение

VBScript не поддерживает несколько назначений. Заявление

x = y = z = 5

будет оцениваться так (псевдокод с использованием := в качестве оператора присваивания и == как оператор сравнения, чтобы лучше проиллюстрировать происходящее):

x := ((y == z) == 5)
x := ((Empty == Empty) == 5)
x := (True == 5)
x := False

В результате переменная x будет назначено значение False в то время как другие переменные (y а также z) оставайтесь пустыми.

Демонстрация:

>>> x = y = z = 5
>>> WScript.Echo TypeName(x)
Boolean
>>> WScript.Echo "" & x
False
>>> WScript.Echo TypeName(y)
Empty
>>> WScript.Echo TypeName(z)
Empty

Заявление

x = 5 : y = 5 : z = 5

не фактическое множественное назначение. Это просто способ написания 3 утверждений

x = 5
y = 5
z = 5

в одной строке (двоеточие отделяет операторы друг от друга в VBScript).

Конструкция x = y = z = 5 работает на языках, где выражения присваивания возвращают присвоенное значение, которое использовалось в предыдущем присваивании, ....

Но в VBScript выражения присваивания не возвращают никакого значения, поэтому вы не можете этого сделать.

Но если присвоение значения переменным только в одной строке со значением, указанным только один раз, является требованием, вы можете использовать стандартные три отдельных оператора

x = 5 : y = x : z = x

или сделать что-то вроде (и да, я знаю, это не эффективно, и это не красиво, это просто делает работу)

Option Explicit

Function S(ByRef variable, value)
    If IsObject( value ) Then 
        Set variable = value
        Set S = value
    Else 
        variable = value
        S = value
    End If
End Function

Dim x, y, z
    Call S(x, S(y, S(z, 5)))

    WScript.Echo x & " " & y & " " & z 
Другие вопросы по тегам