2014-09-25 280 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