Показать полную графическую версию : Вызов функции с определённым количеством аргументов
Привет. Ув. скриптописцы, посоветуйте что-нибудь дельное.
Вот у меня есть AutoIT скрипт, в котором я вызываю функцию.
Call(aaa, "wwwwwww", "ggggggggggggg", "kkkkkkkkkkkkk")
Func aaa($rrr, $ttt, $yyy)
MsgBox(0, "Msg", $rrr)
MsgBox(0, "Msg", $ttt)
MsgBox(0, "Msg", $yyy)
EndFunc
Он работает, но только в том случае, если количество аргументов, точно равно количеству принимаемых параметров вызываемой функции.
Если их 2 или четыре, то функция уже не запускается. Ну так вот, что бы вы посоветовали? Какую можно сделать хитрость?
Ну так вот, что бы вы посоветовали? »
Почитать документацию:
Optional parameters are defined by assigning a default value to them. The value may be a global variable, macro or literal value. Optional parameters always appear last in the function definition. All parameters added after the first optional parameter must also be optional. Inside the function, the number of parameters given when the function was called can be retrieved with the @NumParams macro (see example 2).
Какую можно сделать хитрость? »
Sample("a", "b")
Sample("a", "b", "c")
Sample("a", "b", "c", "d")
Exit(0)
Func Sample($Arg1, $Arg2, $Arg3 = "", $Arg4 = "")
Local $i
ConsoleWrite("Total parameters: " & @NumParams & @CRLF)
For $i = 1 To @NumParams
ConsoleWrite(@TAB & "Parameter #" & $i & ": " & Eval("Arg" & $i) & @CRLF)
Next
ConsoleWrite(@CRLF)
EndFunc
Total parameters: 2
Parameter #1: a
Parameter #2: b
Total parameters: 3
Parameter #1: a
Parameter #2: b
Parameter #3: c
Total parameters: 4
Parameter #1: a
Parameter #2: b
Parameter #3: c
Parameter #4: d
#include <Array.au3>
Dim $aArray[2] = [1, 2]
_CallEx('MyFunc', 'Param1', 'Param2', $aArray)
ConsoleWrite('@error = ' & @error & @CRLF)
Func MyFunc($sParam1, $sParam2, $aParam3)
ConsoleWrite($sParam1 & ' : ' & $sParam2 & @CRLF)
_ArrayDisplay($aParam3)
EndFunc
Func _CallEx($sFunction, $vParam1 = '', $vParam2 = '', $vParam3 = '', $vParam4 = '', $vParam5 = '', $vParam6 = '', $vParam7 = '', $vParam8 = '', $vParam9 = '', $vParam10 = '', $vParam11 = '', $vParam12 = '', $vParam13 = '', $vParam14 = '', $vParam15 = '', $vParam16 = '', $vParam17 = '', $vParam18 = '', $vParam19 = '', $vParam20 = '')
Local $sCall_Params = 'Call("' & $sFunction & '"'
Local $iRet, $iError
For $i = 2 To @NumParams
$sCall_Params &= ', $vParam' & $i - 1
Next
$sCall_Params &= ')'
Do
$iRet = Execute($sCall_Params)
$iError = @error
$sCall_Params = StringRegExpReplace($sCall_Params, '(.*), .*\)$', '\1)', 1)
Until $iError = 0 Or @extended = 0
Return SetError($iError, 0, $iRet)
EndFunc
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.