2014-09-25 279 views
0

功能别名我知道,它没有任何意义。 但是尽管如此。的VBScript创建WScript.Echo

我想创建WScript.Echo的完整副本

我的方法是用另一个短名称创建功能。

Sub print(arguments) 
    WScript.Echo arguments 
End Sub 

在WScript.Echo参数都是字符串WScript.Echo Arg1, Arg2, Arg3... Optional string values to be displayed.的数组(可能不是数组,但它看起来像字符串列表)

我的问题是如何传递同样的理由来我的功能?或者可能一般情况下是不可能的。

+0

你是不是想创建一个'printf'样式函数,其中占位符被替换为值? – Bond 2014-09-25 13:43:20

+0

@Bond如果我理解正确,不。我只是试图为Echo函数创建别名。基于Echo,与其他名称相同的功能。我只是从我的功能调用Echo。问题是如何正确传递参数。 – 2014-09-25 13:50:37

回答

1

WScript.Echo是variadic子(取的参数的任意的数)。你不能在VBScript中编写这样的函数/子/方法。在VBA可以使用Parameter ArrayOptional关键字。

对于VBScript:你可以写一个子接受一个数组作为其唯一的参数和WScript.Echo Join(a),但我怀疑,

print Array(...) 

值得一(1 **少信型)的努力。

更新:**显然,我不能指望。

+0

VBA支持'Optional'关键字和'ParamArray'。你可以使用这些来创建可变例程。编辑:你击败了我。 – Bond 2014-09-25 13:51:22

+0

@Bond - 再次感谢。 – 2014-09-25 13:53:41

1

下面是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