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

news/2024/7/3 5:36:09
很多时候需要封装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 ^_^
作者:心如止水


http://www.niftyadmin.cn/n/3528650.html

相关文章

用any-loader封装jQuery的XHR —— 随便写着玩系列

2019独角兽企业重金招聘Python工程师标准>>> 哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第…

js怎么做默认函数形参_为JavaScript函数设置默认参数值

function read_file(file, delete_after) {delete_after delete_after || "my default here";//rest of code}这分配给delete_after价值delete_after如果不是法尔西值,否则它将分配字符串。"my default here"..要了解更多细节,请查…

roboframework-ride运行案例时报 Error 267 错误问题

偶然间碰到这个问题,检查下路径是否有中文,如有中文换成英文试试。 (ps:通常自己创建的中文路径也是可以的,我的案例是从Linux环境中创建拷贝过来的,可能导致案例路径编码问题)转载于:https://w…

python copy文件超时_在Python中读取超时文件

只需将此添加为注释,以获得更好的格式:Alfe对我的回答是:$ sudo python -c import os, select;fopen("/sys/kernel/debug/tracing/trace_pipe","r"); print f;rrdy, wrdy, xrdy select.select([f], [], [], 1); print r…

python pandas 计算相关系数

pandas 中df 对象自带相关性计算方法corr() , 可以用来计算DataFrame对象中所有列之间的相关系数(包括pearson相关系数、Kendall Tau相关系数和spearman秩相关)。 >>> import numpy as np>>> import pandas as pd >>> df pd…

partprobe使用方法_LVM逻辑卷的配置和挂载使用

LVM逻辑卷的配置和挂载使用为什么使用LVM?①硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间②用户/用户组的空间建立在LVM上,可以随时按要求增大,或根据使…

前端黑科技:美团网页首帧优化实践

前言 自JavaScript诞生以来,前端技术发展非常迅速。移动端白屏优化是前端界面体验的一个重要优化方向,Web 前端诞生了 SSR 、CSR、预渲染等技术。在美团支付的前端技术体系里,通过预渲染提升网页首帧优化,从而优化了白屏问题&…

fastjson 判断是否包含_fastjson如何判断JSONObject和JSONArray

1 package com.fline.aic.utils;23 import org.json.JSONArray;4 import org.json.JSONObject;5 import org.json.JSONTokener;67 public classOrgJsonUtils {89 /**10 * 单层的orgJson判断是否是JSONObject还是JSONArray.11 */12 public static voidsimpleJSONObjectOrgJson()…