Войти

Показать полную графическую версию : Вызов функции с определённым количеством аргументов


Паразит
13-02-2017, 09:43
Привет. Ув. скриптописцы, посоветуйте что-нибудь дельное.
Вот у меня есть 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 или четыре, то функция уже не запускается. Ну так вот, что бы вы посоветовали? Какую можно сделать хитрость?

Iska
13-02-2017, 10:03
Ну так вот, что бы вы посоветовали? »
Почитать документацию:
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

Creat0R
13-02-2017, 13:04
#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