美文网首页「河许人」AutohotkeyAHK程序设计AutoHotKey
[基础] 在AHK中实现函数重载的效果

[基础] 在AHK中实现函数重载的效果

作者: d61f25068828 | 来源:发表于2018-11-14 22:43 被阅读5次

很多时候需要封装AHK函数,有一些函数的功能有关联,我们希望这些函数能够共用一个函数名,这个时就会用到"重载"的概念,但是AHK中没有提供"重载"功能(在Java这个概念经常接触得到,AHK和Python中却都没有),但是我们可以通过变通的方法实现重载。

什么是重载?

当存在多个"函数名相同的但是参数列表不同的函数"时构成重载。

比如Java中的println

  public void println(String x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

   public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }

可变参数

AHK中支持可变参数,在最后一个参数末尾加上*即可,可变参数中输入的数据会直接存入简单数组。利用这一特性,我们可以实现"参数列表长度不一"时的重载。 这个方法的优点在于简洁,缺点在于多个参数名无法区分,程序可读性会下降。

tf(params*){
    
mode:=params.Length()
;~ MsgBox,% mode
if(mode=0)
MsgBox,% "无参"

else if(mode=1)
MsgBox,% "一个参数"

else if(mode=2)
MsgBox,%  "两个参数"
else 
throw Exception("Param Error(Overload)")
return
}

在可选参数中使用特殊字符串

可以为参数列表中的"可选参数"设置特征默认值(尽量生僻),这些特征字符串出现的数量可以计算出"重载模式"。比起上一个的好处在于终于可以添加不同的参数名了。

其实本来想把默认值改为一个特殊对象,后来发现对象不能作为AHK函数的参数默认值。

11月09日-有人问"为什么不用空字串",因为很多时候空字串也是有意义的,这个特殊值要越没有意义,越不可能用到越好。如果你的场景下保证"空字串"有特殊性,那么可以用,很简洁很好。

tf(RenamePresetORptSource:="◇移动◇",ptTarget:="◇复制◇"){
    
mode:=(RenamePresetORptSource!="◇移动◇")+(ptTarget!="◇复制◇")

if(mode=0)
MsgBox,% "移动(无参)"

else if(mode=1)
MsgBox,% "重命名(一个参数)"

else if(mode=2)
MsgBox,%  "复制(两个参数)"
else 
throw Exception("Param Error(Overload)")
return
}

心如止水是Java/AHK的持续学习者
欢迎您来和我探讨Java/AHK问题 QQ2531574300 ^_^


作者:心如止水

相关文章

  • [基础] 在AHK中实现函数重载的效果

    很多时候需要封装AHK函数,有一些函数的功能有关联,我们希望这些函数能够共用一个函数名,这个时就会用到"重载"的概...

  • 初识JavaScript函数Arguments模拟重载

    在 JavaScript 中并没有重载函数的功能,但每个函数中的 Arguments 对象可以模拟重载的实现。 1...

  • [进阶]C++:函数重载

    定义重载函数 重载函数是函数名相同但是参数列表不同的函数 重载和const形参 const_cast 在重载函数中...

  • C++基础语法-重载、extern

    函数重载 今天我们来深入学习下C++的基础语法函数重载。函数重载定义:只要函数名相同,参数个数不同,参数类型不同,...

  • Callback / Callable 类型

    重载函数,和php的伪重载函数 重载函数a. c++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的...

  • c++操作符重载

    一. +号操作符重载 1.在类中重载 在 .h声明 在 .cpp文件 2.全局函数重载 在 .h声明中声明友元函数...

  • c++ 运算符重载

    重载方法 运算符的重载实质上是函数的重载。函数的重载就是对一个已有函数赋予新的含义,使之实现新的功能。 重载运算符...

  • 这才是JavaScript没有重载的真正原因?

    没有重载 ECMAScript函数不能像传统意义上那样实现重载。而在其他语言(如Java)中,可以为一个函数编写两...

  • PHP中实现函数重载

    转载自:https://www.cnblogs.com/ymy124/p/3715430.html由于PHP是弱类...

  • 九、函数模板和类模板

    函数模板 在设计程序中的函数时,可能会遇到函数中参数的类型有差异,但需要实现的功能类似的情形。函数重载可以处理这种...

网友评论

    本文标题:[基础] 在AHK中实现函数重载的效果

    本文链接:https://www.haomeiwen.com/subject/enwsfqtx.html