有没有方法可以在 vb 脚本中为函数创建可选参数,从而允许您编写类似于...的函数
myFunc("happy")
myFunc("happy", 1, 2, 3)
myFunc("happy", 1)
etc.
vbscript 中不允许使用可选关键字(如 VB6)
也许这有帮助: https://web.archive.org/web/20210304114036/http://www.4guysfromrolla.com/webtech/071801-1.shtml
超载怎么样?
您始终可以将其设为
class
并在调用之前使用 Public Property Let
填充您的 Sub
/Function
:
Set oSubName = New cSubName
'fill your parameters, you can always add more later
oClass.OptionalParameter1 = true
oClass.OptionalParameter2 = false
'execute sub
oSubName.Execute
Set oSubName = Nothing
这需要一些有关如何创建类的知识,但可能是使用数组的下一个最佳解决方案。
祝你好运。
显然,这取决于您的环境以及它是否支持在同一文件中同时使用 JScript 和 VBScript,但我使用 Windows Script Host(*.wsf 文件)取得了一些成功,即
<?xml version="1.0" standalone="yes" ?>
<package xmlns="Windows Scripting Host">
<job id="param">
<?job debug="true"?>
<script language="JavaScript">
<![CDATA[
function MakeString(args) {
var s = [];
for(var i = 0, length = arguments.length; i < length; i++)
s.push(arguments[i]);
return s.join('');
}
]]>
</script>
<script language="vbscript">
<![CDATA[
WScript.Echo MakeString("hello", " ", "world")
WScript.Echo MakeString()
WScript.Echo MakeString(1,2,3,4)
]]>
</script>
</job>
</package>
您可以在 JScript 中定义函数并在 VBScript 中引用它。更好的方法可能是将 JScript 函数作为外部文件包含在内,即
<script language="JavaScript" src="makestring.js"/>
<script language="vbscript">
<![CDATA[
WScript.Echo MakeString("hello", " ", "world")
WScript.Echo MakeString()
WScript.Echo MakeString(1,2,3,4)
]]>
</script>
要在 VBScript 函数中使用可选参数,您可以使用 IsArray 函数来确定传递的参数是单个值还是参数数组。
下面是一个具有两个必需参数的函数示例,即 argRequired 和 argFields(假设后者不是数组)。通过显式指定,可以将任意数量的必需参数添加到函数中。
Function myFunc(ByVal argRequired, ByVal argFields)
Field_0 = argRequired
Field_1 = "Default 1"
Field_2 = "Default 2"
Field_3 = "Default 3"
Field_4 = "Default 4"
' ...
If IsArray(argFields) Then
For I = 0 to UBound(argFields)
Select Case I
Case 0 Field_1 = argFields(I)
Case 1 Field_2 = argFields(I)
Case 2 Field_3 = argFields(I)
Case 3 Field_4 = argFields(I)
' ...
End Select
Next
Else
Field_1 = argFields
End If
' my code
End Function
调用不带可选参数的函数:
myFunc("first", 100)
要调用带有可选参数的函数,请将最后一个必需参数和所有可选参数封装在一个数组中:
myFunc("first", Array(100, "third", 200, False))
在第一种情况下,myFunc 将看到第二个参数不是数组并将其作为项目处理。
在第二个中,myFunc 将第二个参数作为参数数组进行处理,并相应地解析数组项。 Select 语句用于允许数组中存在可变数量的可选参数,而不是需要固定的数组大小。
注意:如果只需要一个参数,argRequired 可以省略:
Function myFunc(ByVal argFields)
Field_1 = "Default 1"
Field_2 = "Default 2"
' ...
If IsArray(argFields) Then
For I = 0 to UBound(argFields)
Select Case I
Case 0 Field_0 = argFields(I)
Case 1 Field_1 = argFields(I)
Case 2 Field_2 = argFields(I)
' ...
End Select
Next
Else
Field_0 = argFields
End If
' my code
End Function
只需传递一个不同的类型并查看即可。
wscript.echo "1: " & math(7,8,false)
wscript.echo "2: " & math(7,8,5)
wscript.echo "3: " & math(15,false,5)
function math( Addend1 , Addend2, Divisor )
dim tmpTotal
if Addend2 then
TmpTotal = Addend1 + Addend2
else
tmpTotal = Addend1
end if
if Divisor then 'if argument Divisor is other than False then do it.
if Divisor > 0 then 'Hated Divide by Zero since VIC-20.
tmpTotal = tmpTotal / Divisor)
end if
end if
end function