Тема: VBScript: имитация переменного числа аргументов процедуры/функции
Иногда необходимо использовать переменное число аргументов у процедуры/функции (то есть, когда заранее неизвестно, каково будет число аргументов). Напрямую такое сделать (как, скажем, в jscript), по-видимому, невозможно, но можно сымитировать подобное поведение, передавая в процедуру/функцию массив с произвольным количеством элементов, которые и будут служить «аргументами» данной процедуры/функции:
Option Explicit
Dim arrArgs
SomeSub Array(10)
SomeSub Array(10, 0.5)
SomeSub Array(10, 0.5, "Some string value")
SomeSub Array(10, 0.5, "Some string value", True)
WScript.Quit 0
'=============================================================================
'=============================================================================
Sub SomeSub(ByRef arrArgs)
Dim i
WScript.Echo
WScript.Echo "Количество аргументов: ", UBound(arrArgs) + 1
WScript.Echo "------------------------------------------"
WScript.Echo "#", vbTab, "Тип", vbTab, "Значение"
WScript.Echo "------------------------------------------"
For i = LBound(arrArgs) To UBound(arrArgs)
WScript.Echo CStr(i + 1), vbTab, TypeName(arrArgs(i)), vbTab, arrArgs(i)
Next
WScript.Echo "------------------------------------------"
End Sub
'=============================================================================
Точно так же можно передавать и аргументы объектного типа:
Option Explicit
Dim arrArgs
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
SomeSub Array(10, "Some string value", objFSO, CreateObject("WScript.Shell"), Nothing)
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Sub SomeSub(ByRef arrArgs)
Dim i
WScript.Echo
WScript.Echo "Количество аргументов: ", UBound(arrArgs) + 1
WScript.Echo "------------------------------------------"
WScript.Echo "#", vbTab, "Тип", vbTab, "Значение"
WScript.Echo "------------------------------------------"
For i = LBound(arrArgs) To UBound(arrArgs)
If IsObject(arrArgs(i)) Then
WScript.Echo CStr(i + 1), vbTab, TypeName(arrArgs(i)), vbTab, "Object"
Else
WScript.Echo CStr(i + 1), vbTab, TypeName(arrArgs(i)), vbTab, arrArgs(i)
End If
Next
WScript.Echo "------------------------------------------"
End Sub
'=============================================================================
Автор идеи — Dmitrii.