设置未知类型的 VBScript 变量
Set VBScript Variable with Unknown Type
VBScript 有两种设置变量的语法
String、Integer等基元设置为
primitive_var = 3
虽然对象设置为
Set my_object = some_object
我有一个可以 return 的函数调用。我可以按如下方式检查类型
If VarType(f(x, y)) = vbObject Then
Set result = f(x, y)
Else
result = f(x, y)
End If
然而这浪费了一个函数调用。我怎样才能只调用一次 f 来做到这一点?
您可以使用分配给变量的 Sub,对对象使用 Set:
Option Explicit
' returns regexp or "pipapo" (probably a design error,
' should be two distinct functions)
Function f(x)
If x = 1 Then
Set f = New RegExp
Else
f = "pipapo"
End If
End Function
' assigns val to var nam, using Set for objects
' ByRef to emphasize manipulation of var nam
Sub assign(ByRef nam, val)
If IsObject(val) Then
Set nam = Val
Else
nam = Val
End If
End Sub
Dim x
assign x, f(1) : WScript.Echo TypeName(x)
assign x, f(0) : WScript.Echo TypeName(x)
输出:
cscript 27730273.vbs
IRegExp2
String
但我宁愿有两个不同的函数而不是一个 f()。
VBScript 有两种设置变量的语法
String、Integer等基元设置为
primitive_var = 3
虽然对象设置为
Set my_object = some_object
我有一个可以 return 的函数调用。我可以按如下方式检查类型
If VarType(f(x, y)) = vbObject Then
Set result = f(x, y)
Else
result = f(x, y)
End If
然而这浪费了一个函数调用。我怎样才能只调用一次 f 来做到这一点?
您可以使用分配给变量的 Sub,对对象使用 Set:
Option Explicit
' returns regexp or "pipapo" (probably a design error,
' should be two distinct functions)
Function f(x)
If x = 1 Then
Set f = New RegExp
Else
f = "pipapo"
End If
End Function
' assigns val to var nam, using Set for objects
' ByRef to emphasize manipulation of var nam
Sub assign(ByRef nam, val)
If IsObject(val) Then
Set nam = Val
Else
nam = Val
End If
End Sub
Dim x
assign x, f(1) : WScript.Echo TypeName(x)
assign x, f(0) : WScript.Echo TypeName(x)
输出:
cscript 27730273.vbs
IRegExp2
String
但我宁愿有两个不同的函数而不是一个 f()。