<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: имитация переменного числа аргументов процедуры/функции]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=3433</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3433&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: имитация переменного числа аргументов процедуры/функции».]]></description>
		<lastBuildDate>Thu, 23 Jul 2009 07:44:55 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: имитация переменного числа аргументов процедуры/функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=26243#p26243</link>
			<description><![CDATA[<p>Я давно и практически везде пользуюсь Dictionary<br /></p><div class="codebox"><pre><code>Set dP = CreateObject(&quot;Scripting.Dictionary&quot;)
dP(&quot;P1&quot;)=Now
dP(&quot;P2&quot;)=&quot;Привет&quot;
Set dP(&quot;d$P1&quot;)=CreateObject(&quot;Scripting.Dictionary&quot;)
dP(&quot;d$P1&quot;)(&quot;P1&quot;)=&quot;Dictionary In Dictionary&quot;

&#039;для примера
&#039;rst.Open &quot;select * from ddeTVS_TVS_RIU9&quot;,cnn
&#039;Set dP(&quot;rst$P1&quot;)=rst
&#039;

RC=FUNC(dP)
MsgBox RC
RC=FUNC(&quot; I=4:B=6:T=&quot;&quot;TEXT&quot;&quot; &quot;)
MsgBox RC


Function FUNC(WHAT)
If IsObject(WHAT) Then
   For Each Key In WHAT.Keys
       If InStr(1,Key,&quot;d$&quot;) Then
          MsgBox WHAT(Key)(&quot;P1&quot;)
       End If
       If InStr(1,Key,&quot;rst$&quot;) Then
          MsgBox WHAT(Key).RecordCount
       End If
   Next
   FUNC=WHAT.Count
  Else
   Execute WHAT
   MsgBox &quot;I=&quot; &amp; I
   MsgBox &quot;B=&quot; &amp; B
   FUNC=T
End If 
End Function</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (ingvar68)]]></author>
			<pubDate>Thu, 23 Jul 2009 07:44:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=26243#p26243</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: имитация переменного числа аргументов процедуры/функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=26198#p26198</link>
			<description><![CDATA[<p>Иногда необходимо использовать переменное число аргументов у процедуры/функции (то есть, когда заранее неизвестно, каково будет число аргументов). Напрямую такое сделать (как, скажем, в jscript), по-видимому, невозможно, но можно сымитировать подобное поведение, передавая в процедуру/функцию массив с произвольным количеством элементов, которые и будут служить «аргументами» данной процедуры/функции:<br /></p><div class="codebox"><pre><code>Option Explicit

Dim arrArgs

SomeSub Array(10)
SomeSub Array(10, 0.5)
SomeSub Array(10, 0.5, &quot;Some string value&quot;)
SomeSub Array(10, 0.5, &quot;Some string value&quot;, True)

WScript.Quit 0
&#039;=============================================================================

&#039;=============================================================================
Sub SomeSub(ByRef arrArgs)
    Dim i
    
    WScript.Echo
    WScript.Echo &quot;Количество аргументов: &quot;, UBound(arrArgs) + 1
    WScript.Echo &quot;------------------------------------------&quot;
    WScript.Echo &quot;#&quot;, vbTab, &quot;Тип&quot;, vbTab, &quot;Значение&quot;
    WScript.Echo &quot;------------------------------------------&quot;
    
    For i = LBound(arrArgs) To UBound(arrArgs)
        WScript.Echo CStr(i + 1), vbTab, TypeName(arrArgs(i)), vbTab, arrArgs(i)
    Next
    
    WScript.Echo &quot;------------------------------------------&quot;
End Sub
&#039;=============================================================================</code></pre></div><p>Точно так же можно передавать и аргументы объектного типа:<br /></p><div class="codebox"><pre><code>Option Explicit

Dim arrArgs
Dim objFSO

Set objFSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)

SomeSub Array(10, &quot;Some string value&quot;, objFSO, CreateObject(&quot;WScript.Shell&quot;), Nothing)

Set objFSO = Nothing

WScript.Quit 0
&#039;=============================================================================

&#039;=============================================================================
Sub SomeSub(ByRef arrArgs)
    Dim i
    
    WScript.Echo
    WScript.Echo &quot;Количество аргументов: &quot;, UBound(arrArgs) + 1
    WScript.Echo &quot;------------------------------------------&quot;
    WScript.Echo &quot;#&quot;, vbTab, &quot;Тип&quot;, vbTab, &quot;Значение&quot;
    WScript.Echo &quot;------------------------------------------&quot;
    
    For i = LBound(arrArgs) To UBound(arrArgs)
        If IsObject(arrArgs(i)) Then
            WScript.Echo CStr(i + 1), vbTab, TypeName(arrArgs(i)), vbTab, &quot;Object&quot;
        Else
            WScript.Echo CStr(i + 1), vbTab, TypeName(arrArgs(i)), vbTab, arrArgs(i)
        End If
    Next
    
    WScript.Echo &quot;------------------------------------------&quot;
End Sub
&#039;=============================================================================</code></pre></div><p>Автор идеи — <strong>Dmitrii</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Tue, 21 Jul 2009 15:53:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=26198#p26198</guid>
		</item>
	</channel>
</rss>
