关 键 字 参 考


Func...Return...EndFunc

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

Func 函数名称 ( [常量] [ByRef] 参数1, ..., [常量] [ByRef] 参数N, $可选参数1 = 值, ...)
    ...
    [Return []]
EndFunc

参 数

可以随意设置参数. 以后象调用内置函数一样调用它们.

备 注

关键字[常量]是可选的, 表明在函数执行期间参数值不会改变.
变量申明为[常量]时, 则只能传递给使用这个常量的函数.

关键字 [ByRef] 表明参数应视为参照原对象.
默认复制参数到一个新的变量, ByRef 链接新变量到原始参数.
当函数需要大量数据(如大型数组)时, 复制数据将存在重大的性能损失, 此时通常首选 ByRef.
请注意, 不仅命名的变量可作为参数传递给 ByRef; 无名的临时变量,
例如函数返回值, 也可以作为参数传递给 ByRef. 文字不能作为参数传递到 ByRef.

如果同时使用关键字 [ByRef] 和 [常量], 关键字的顺序并不重要, 只要都在它们修改的变量前面即可.

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


指定一个默认值来定义" 可选参数 ". 该值可以是全局变量, 宏指令或文字值.
可选参数总是出现在函数定义的最后. 第一个可选参数后面添加的所有参数也必须是可选的.
当函数被调用时, 给定参数的数量能被 @NUMPARAMS 宏指令检索(见示例 2).

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

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

相 关 函 数

Dim/Global/Local, #include, Const

函 数 示 例


Example1()
Example2()

; 示例 1
Func Example1()
    ; 三个用户定义函数的示例脚本
    ; 注意变量 ByRef 的使用, 并返回

    Local $foo = 2
    Local $bar = 5
    MsgBox(0, "今天是 " & today(), "变量 $foo 等于 " & $foo)
    swap($foo, $bar)
    MsgBox(0, "变量 $foo 与 $bar 交换后", "变量 $foo 现在等于 " & $foo)
    MsgBox(0, "最后", "3 与 4 的较大数是 " & max(3, 4))
EndFunc   ;==>Example1

Func swap(ByRef $a, ByRef $b) ;交换两个变量的值
    Local $t
    $t = $a
    $a = $b
    $b = $t
EndFunc   ;==>swap

Func today() ;返回当前日期的 mm/dd/yyyy 格式
    return (@MON & "/" & @MDAY & "/" & @YEAR)
EndFunc   ;==>today

Func max($x, $y) ;返回两个数字的较大值
    If $x > $y Then
        Return $x
    Else
        Return $y
    EndIf
EndFunc   ;==>max

;示例脚本 1 结束

; 示例 2
Func Example2()
    ; 演示宏 @NumParams
    Test_Numparams(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
EndFunc   ;==>Example2

Func Test_Numparams($v1 = 0, $v2 = 0, $v3 = 0, $v4 = 0, $v5 = 0, $v6 = 0, $v7 = 0, $v8 = 0, $v9 = 0, _
        $v10 = 0, $v11 = 0, $v12 = 0, $v13 = 0, $v14 = 0, $v15 = 0, $v16 = 0, $v17 = 0, $v18 = 0, $v19 = 0)
    #forceref $v1, $v2, $v3, $v4, $v5, $v6, $v7, $v8, $v9, $v10, $v11, $v12, $v13, $v14, $v15, $v16, $v17, $v18, $v19
    Local $val
    For $i = 1 To @NumParams
        $val &= Eval("v" & $i) & " "
    Next
    MsgBox(0, "@NumParams 示例", "@NumParams =" & @NumParams & @CRLF & @CRLF & $val)
EndFunc   ;==>Test_Numparams

;示例脚本 2 结束

provider with jb51.net (unicode)