3

VBScript でいくつかの変数を同じ値で初期化する必要があります。私が見つけることができる唯一の方法は、たとえばx = 5 : y = 5 : z = 5です。に似た方法はありx = y = z = 5ますか?

4

2 に答える 2

5

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

を 1 行で入力します (VBScript ではコロンでステートメントを互いに区切ります)。

于 2015-07-13T16:46:11.043 に答える
2

この構造x = y = z = 5は、割り当て式が割り当てられた値を返す言語で機能し、それは前の割り当てで使用されます....

しかし、VBScript では代入式は値を返さないため、それを行うことはできません。

ただし、値を 1 回だけ指定して 1 行だけで変数に値を代入する必要がある場合は、標準の 3 つの区切りステートメントを使用できます。

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 
于 2015-07-13T17:04:21.467 に答える