Keyword Reference

首页  后退  前进

Func...Return...EndFunc

定义用户自定义函数,接受 0 或多个参数.可以选择返回的结果.

 

Func functioname ( [Const] [ByRef] $param1, ..., [Const] [ByRef] $paramN, $optionalpar1 = value, ...)

...

[Return [value]]

EndFunc

参数

可以设置参数. 稍后调用这个函数就像调用任何其他内置函数.

 

备注

变量和函数是不区分大小写的, 因此 SomeFunc() 等同于 SoMEFunC(). 反之亦然.

 

关键字[常量]是可选的, 表明在函数执行期间参数值不会改变.

变量申明为[常量]时, 则只能传递给使用这个常量的函数.

 

关键字 [ByRef] 表明参数作为参考.

默认行为是复制参数到一个新的变量, 但 ByRef 链接新变量到原始参数.

请注意, 不仅命名的变量可作为参数传递给 ByRef; 无名的临时变量, 例如函数返回值, 也可以作为参数传递给 ByRef. 但文字不能作为参数传递到 ByRef.

当传递大量数据(如一个文件的内容)时, 复制数据将存在重大的性能损失, 此时应使用 ByRef.

另一个优势是,当函数传递改变内容的参数时, ByRef 删除任何改变,返回受原始参数直接影响的值

 

对于必须保持不变的大型原始变量, 如果函数修改了这样的变量, AutoIt 将返回一个错误, 此时将参数声明为 ByRef 和 Const 是非常有用. 关键字的顺序并不重要, 只要变量都在被修改之前即可.

 

整个数组可以传递给函数(并返回它们), 只需使用没有任何括号的数组名称即可.

数组应该使用 [ByRef] 关键字传递给用户定义的函数, 以避免复制数组数据的开销.

如果数组内容被改变, AutoIt 只复制数组参数(名称), 这是 ByRef 的优势, 虽然建议在所有情况下使用它.

 

指定一个默认值来定义" 可选参数 ". 该值可以是全局变量, 宏指令或文字值.

可选参数总是出现在函数定义的最后. 第一个可选参数后面添加的所有参数也必须是可选的.

当函数被调用时, 给定参数的数量能被 @NUMPARAMS 宏指令检索(见示例 2).

 

使用 Return 关键字退出函数. 与内置函数不同, 除非另外指定一个返回值, 否则用户定义函数返回 0.

使用 Return 和 SetError() 允许返回设置的 @error 与 @extended 值.

 

请注意, 函数声明不能出现在其它函数声明内.

相关

Const, Global/Local, #include

函数示例

示例 1

#include <Date.au3>
#include <Math.au3>
#include <MsgBoxConstants.au3>
Example()
Func Example()
    ; Sample script with two user-defined functions.
    ; Notice the use of variables, ByRef and Return.
    Local $iFoo = 2
    Local $iBar = 5
    MsgBox($MB_SYSTEMMODAL, "", "Today is " & Today() & @CRLF & "$iFoo equals " & $iFoo)
    Swap($iFoo, $iBar)
    MsgBox($MB_SYSTEMMODAL, "", "After swapping $iFoo and $iBar:" & @CRLF & "$iFoo now contains " & $iFoo)
    MsgBox($MB_SYSTEMMODAL, "", "Finally:" & @CRLF & "The larger of 3 and 4 is " & _Max(3, 4))
EndFunc   ;==>Example
Func Swap(ByRef $vVar1, ByRef $vVar2) ; Swap the contents of two variables.
    Local $vTemp = $vVar1
    $vVar1 = $vVar2
    $vVar2 = $vTemp
EndFunc   ;==>Swap
Func Today() ; Return the current date in mm/dd/yyyy form.
    Return @MON & "/" & @MDAY & "/" & @YEAR
EndFunc   ;==>Today

示例 2

#include <MsgBoxConstants.au3>
Example()
Func Example()
    ; Sample scriptusing @NumParams macro
    Test_Numparams(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
EndFunc   ;==>Example
Func Test_Numparams($vVar1 = 0, $vVar2 = 0, $vVar3 = 0, $vVar4 = 0, $vVar5 = 0, $vVar6 = 0, $vVar7 = 0, $vVar8 = 0, $vVar9 = 0, _
        $vVar10 = 0, $vVar11 = 0, $vVar12 = 0, $vVar13 = 0, $vVar14 = 0, $vVar15 = 0, $vVar16 = 0, $vVar17 = 0, $vVar18 = 0, $vVar19 = 0)
    #forceref $vVar1, $vVar2, $vVar3, $vVar4, $vVar5, $vVar6, $vVar7, $vVar8, $vVar9, $vVar10
    #forceref $vVar11, $vVar12, $vVar13, $vVar14, $vVar15, $vVar16, $vVar17, $vVar18, $vVar19
    Local $sVal = ""
    For $i = 1 To @NumParams
        $sVal &= Eval("vVar" & $i) & " "
    Next
    MsgBox($MB_SYSTEMMODAL, "", "@NumParams = " & @NumParams & @CRLF & @CRLF & $sVal)
EndFunc   ;==>Test_Numparams

----------------------------------------