autohotkey 函数

autohotkey函数 (一)

基本使用举例

定义
Add(x, y)
{
    return x + y   ; "Return" 期望 表达式.
}
调用
  • Var := Add(2, 3) ; 数字 5 将被保存到 Var.
  • Add(2, 3) ; 无返回值
注意

由于函数调用是 表达式, 在其参数列表中的任何变量名称都不应该括在百分号中. 与之相比, 原义的字符串应该括在双引号中.

if InStr(MyVar, "fox")
    MsgBox The variable MyVar contains the word fox.

最后, 可以在任何命令的参数中调用函数 (除了像 StringLen 的中的那些 OutputVar 和 InputVar 参数).
然而, 不支持 表达式 的参数必须加上 "% " 前缀, 例如:
MsgBox % "The answer is: " . Add(3, 2)
在原生支持表达式的参数中也允许加上 "% " 前缀, 不过它会被简单的忽略了

参数

定义函数时, 其参数都在其名称后面的括号中列出 (在其名称和开括号之间不能含有空格). 如果函数不接受任何参数,请把括号留空,例如:GetCurrentTimestamp()。

ByRef参数

从函数的角度看, 参数本质上是 局部变量, 除非它们被定义为 ByRef, 例如:

Swap(ByRef Left, ByRef Right)
{
    temp := Left
    Left := Right
    Right := temp
}

在上述例子中, ByRef 的使用让每个参数变成从调用者传递进来的变量的一个别名. 换句话说, 参数和调用者的变量都引用内存中相同的内容. 这样使得 Swap 函数可以通过移动 Left 的内容到 Right 中来修改调用者的变量, 反之亦然.
有点类似于C++中的引用

  • IsByRef() 函数可以用来判断调用者是否为指定的 ByRef 参数提供了变量。
  • 不能传递 Clipboard, 内置变量 或 环境变量 给函数的 ByRef 参数, 即使脚本中没有 #NoEnv 时.
  • 尽管函数可以递归调用它自己,但是如果它传递它自己的一个局部变量或非 ByRef 参数给自己的 ByRef,那么新一层的 ByRef 参数将引用它自己那个名称的局部变量而不是之前层的。然而, 当函数传递给它自己 全局变量, 静态变量 或 ByRef 参数时不会产生这样的问题.

可选参数

定义函数时, 可以把它的一个或多个参数标记为可选的. 这可以通过在参数后添加一个等号(在 v1.1.09+ 中还可以为 :=)跟着默认值完成. 后面的函数中其 Z 参数被标记为可选的:

Add(X, Y, Z:=0) {
    return X + Y + Z
}
注意

ByRef 参数 也支持默认值; 例如: Func(ByRef p1 = “”). 每当调用者省略这样的参数时, 函数会创建一个包含默认值的局部变量; 换句话说, 函数表现的就像关键字 “ByRef” 没有那样

可以使用对象和数组返回多值甚至是命名值

Test1 := returnArray1()
MsgBox % Test1[1] "," Test1[2]

Test2 := returnArray2()
MsgBox % Test2[1] "," Test2[2]

Test3 := returnObject()
MsgBox % Test3.id "," Test3.val

returnArray1() {
  Test := [123,"ABC"]
  return Test
}

returnArray2() {
  x := 456
  y := "EFG"
  return [x, y]
}

returnObject() {
  Test := {id: 789, val: "HIJ"}
  return Test
}

可变参数函数

Join(sep, params*) {
    for index,param in params
        str .= param . sep
    return SubStr(str, 1, -StrLen(sep))
}
MsgBox % Join("`n", "one", "two", "three")
注意

调用可变参数函数时, 通过保存在函数的最后参数中的对象可以访问剩余的参数. 函数的首个剩余参数在 params[1], 第二个在 params[2] 等等. 和所有的标准对象一样, 使用 params.MaxIndex() 可以确定最大的索引值 (这里为参数的数目). 但是如果没有参数, MaxIndex 会返回空字符串.

“可变” 参数只可以出现在形式参数列表的末尾.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值