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
----------------------------------------
|