下面是VBS代码,它提供了与VBA中的ParamArray
修饰符相同的功能:它允许传递任意数量的参数,并且调用函数接收传递的参数作为数组。它使用ScriptControl的JScript的arguments
财产准备的参数数组。
Dim oSC, Echo
Set oSC = CreateObject("MSScriptControl.ScriptControl")
oSC.Language = "JavaScript"
oSC.AddCode "echo = function() {var dict = new ActiveXObject('Scripting.Dictionary'); for(var i=0; i<arguments.length; i++) {dict.add(i, arguments[i]);} echoArr(dict.Items());}"
oSC.AddObject "echoArr", GetRef("EchoArr"), True
Set Echo = oSC.Eval("echo")
Echo "one", "two", "three"
Echo "True variadic sub"
Function EchoArr(arr)
WScript.Echo Join(arr)
End Function
要调用WScript.Echo
在可变参数方法的方式,你可以使用Execute
,并与下面的代码替换上述代码EchoArr
功能(但我不知道它有实用价值):
Function EchoArr(arr)
Dim s, i
s = "WScript.Echo "
i = 0
For i = 0 to UBound(arr)
s = s & "arr(" & i & ")"
If i < UBound(arr) Then s = s & ", "
Next
Execute s
End Function
你是不是想创建一个'printf'样式函数,其中占位符被替换为值? – Bond 2014-09-25 13:43:20
@Bond如果我理解正确,不。我只是试图为Echo函数创建别名。基于Echo,与其他名称相同的功能。我只是从我的功能调用Echo。问题是如何正确传递参数。 – 2014-09-25 13:50:37