Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Вызов функции с определённым количеством аргументов (http://forum.oszone.net/showthread.php?t=323796)

Паразит 13-02-2017 09:43 2711349

Вызов функции с определённым количеством аргументов
 
Привет. Ув. скриптописцы, посоветуйте что-нибудь дельное.
Вот у меня есть 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 2711351

Цитата:

Цитата Паразит
Ну так вот, что бы вы посоветовали? »

Почитать документацию:
Цитата:

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 2711393

Код:

#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



Время: 02:01.

Время: 02:01.
© OSzone.net 2001-