在VB脚本中,是否有创建可选参数的函数的方法?

30

有没有办法在VB Script中创建可选参数,允许您编写像这样的函数...

myFunc("happy")
myFunc("happy", 1, 2, 3)
myFunc("happy", 1)
etc.
6个回答

18

有点类似。理想情况下,我希望避免使用数组或将 null 参数提供给函数。看来这在 VB 脚本中是不可能的。感谢您的帮助。 - Rob Segal
你好!请问您能否编辑一下您的链接,因为我找不到它?也许已经移动到另一个页面或链接了。谢谢! - Hackoo
https://web.archive.org/web/20210304114036/http://www.4guysfromrolla.com/webtech/071801-1.shtml - Daniel Kreiseder

3

你可以将其作为一个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

这需要一些关于如何创建类的知识,但很可能是使用数组之外更好的解决方案。
祝你好运。

2

2
还是有点类似。你仍然需要使用数组或对参数进行空值检查。我猜这就是VB脚本所提供的最好的了。感谢您的帮助。 - Rob Segal
VBScript不提供真正的重载。 - C. Ross
你的链接指向一个奇怪的地方,可能不是它最初指向的地方。 - undefined
虽然这个链接可能回答了问题,但最好在这里包含答案的关键部分,并提供链接作为参考。仅有链接的答案如果链接页面发生变化,可能会变得无效。- 来自评论 - undefined

1

显然这取决于您的环境以及它是否支持在同一文件中使用JScript和VBScript,但我已经成功地使用Windows脚本主机(*.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>

0
要在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

-5

只需传递不同的类型并查看它。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接