[基础] AHK函数对象系列-绑定方法对象v3

news/2024/7/3 6:51:25

文章编号-AHK-J003-绑定方法对象

缘由

希望用户在对象创建时就能够直接为成员方法绑定某键,如果这个功能不能实现,那么用户就需要在脚本里手动创立,一旦对象多了,就特别麻烦。

大概一周之前“绑定函数对象”实现了,参见[[基础] AHK函数对象系列-绑定函数对象](https://zhuanlan.zhihu.com/p/...,今天“绑定方法对象”也实现了。在这里分享一下案例,希望对大家的程序设计能够起到帮助。^_^

绑定方法对象介绍

重要提醒:如果您对“方法”/“构造方法”/“对象”等基础知识没有接触的话,建议先查阅一下相关资料。另外针对这三个常用的概念,我会在文章后面用斜体特别的作出解释。

绑定方法对象也属于广义的“函数对象”,通过“绑定方法对象”,可以实现在成员方法之间更灵活的相互引用(比如用于HotKey命令/GUI事件/SetTimer事件),能提高代码的可读性和可复用性,让程序更便于维护。它的使用方法和之前说过的“绑定函数对象(BindFunctionObject)”是类似的。

绑定方法对象创立方法

BoundFunc := ObjBindMethod(Obj, Method, Params)

当然如果在Class设计的时候就用,那么Obj用this代指,估计这也是最常用的形式。

示例设计目标

在对象实例化的时候就提醒用户输入热键,用户输入热键(当然,实际应用中也可以根据对象的数量自动生成,比如说第一次^k,第二次^l,这个也用的很频繁。不过这个是专门来说“函数绑定对象”的,所以也就无所谓了。)之后该热键能直接绑定对象中的某方法。

示例

DefaultHotkey:="^t"
InputBox,UserOption,热键设置,请为软件的功能设置一个您喜欢的热键,,,,,,,,%DefaultHotkey%
if (ErrorLevel=1){
    TrayTip,热键设置,您未输入热键,故程序将自动设置热键为默认值Ctrl+t
    UserOption:=DefaultHotkey
}
obj_0:=new Test(UserOption) ;# [3] 

return ;# 自动执行结束

class Test{  ;# [1] 

;# 成员属性
todo_0:=""

TheNumber_2[]{
get{
return this.TheNumber_2_B
}

set{
return this.TheNumber_2_B:=value
}
}

TheNumber_2_B:="2"

;# 构造方法
__New(UserOption){ ;# [2] 
    this.todo_0:=ObjBindMethod(this,"ThePrint",this.TheNumber_2)
    todo_0:=this.todo_0
    
    Hotkey,%UserOption%,% todo_0
    ;~ Hotkey,%UserOption%,% this.todo_0 ;(错误的用法) 
    ;# [4] 
TrayTip,热键设置,已为您成功设置热键%UserOption% `r`nO(∩_∩)O  愿您使用愉快
    return this
}

;# 示例功能
ThePrint(Data){
    MsgBox,% "数据打印如下`r`n" Data
    return
}
}

注释

[1] 这个语句的意思是建立一个名字为Test的“类” ,“类”是什么?顾名思义“类”就是某一些具有相似特性的东西的集合,比如我们常吃的一类水果叫做苹果,有红富士苹果也有金帅苹果,那么“水果”是“苹果”的类,同样“苹果”是“红富士苹果”的类。那么建立类有什么作用呢?主要的作用就是实现大程度的代码复用。也就是说,如果你要建立一个新苹果叫做“蓝富士苹果”,那你就直接可以从“苹果”中进行修改,而不用二次建立。如果想了解更多,建议学习“面向对象编程”的相关知识。
[2] 构造方法。在AHK中构造方法是用__New定义的,构造方法的作用就是生成一个对象,并且返回,如果一个class中没有定义构造方法,那么它就会自动生成一个“空”构造方法,也就是说,除了返回对象本身不进行任何操作。当自定义__New时,用户调用的过程中,不仅会返回“对象”,还会运行该方法中的其他语句。
[3] 构造方法的调用。调用形式就是new ClassName(ParaMeters)。

[4] 为什么这个地方不直接用,Hotkey,%UserOption%,% this.todo_0,而要绕一个圈子

this.todo_0:=ObjBindMethod(this,"ThePrint",this.TheNumber_2)
todo_0:=this.todo_0

用,Hotkey,%UserOption%,% todo_0呢?

因为AHK中的成员变量中的对象,不能直接被HotKey所使用,具体原因不详,在帮助文件上查不到任何相关解释。
所以只能先转换成本地变量todo_0再给HotKey来使用。

如果直接使用的话就会弹出这样的提示。我不知道这是BUG还是有意的设计,我比较偏向于这是“BUG”,因为Error的信息是驴唇不对马嘴的。Error的意思是说^t这个热键是不对的,其实和^t什么关系也没有,改成什么键都不行,只有改一下对象的来源才行。

Error:  Nonexistent hotkey.
Specifically: ^t

之前的示例没有出问题,是因为我并不知道:在AHK中,所有的地方只要是访问成员变量,必须要使用this(声明除外)。可以说,这真的是一个脑残设计,一样原因不详。

当然是选择原谅TA了

End

心如止水是Java/AHK的持续学习者,很欢迎您来和我探讨Java/AHK问题。 QQ:2531574300 ^_^

AHK版本:1.1.30.00

文章版本信息

v2_11月18日:应读者要求增加了对于“构造方法”/“对象”/“类”的更多解释。

v3_11月22日:发现在目前为止(1.1.30.01)在成员变量中存储的“方法绑定对象”,无法被HotKey命令使用。并基于此修改案例。

更多文章

[基础] AHK函数对象系列-绑定函数对象
[基础] 在AHK中实现函数重载的效果
[AHK-lib分享] 用指定程序批量打开文档
[基础] [GIF动图] 绕过中文输入法发送文本的3种方法

版权声明:

该文章版权系“心如止水”所有,欢迎分享、转发,但如需转载,请联系QQ:2531574300,得到许可并标明出处和原链接后方可转载。未经授权,禁止转载。

作者:心如止水


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

相关文章

C++中的函数模板详解

了解或熟悉C的都,都对函数重载有一定的了解。C中的函数重载就是指申明几个功能类似的函数,但这些函数的参数类型或顺序必须不同,即同一个函数不同的运算功能。例如,比较a,b的大小,我们可以定义一个max函数,…

计算机应用基础 江西服装学院,新版《计算机应用基础》教案.doc

新版《计算机应用基础》教案.doc天天快乐江西服装学院2015——2016上学期《计算机应用基础》教案教师:舒阳霞服装商贸分院(计算机教研室)授课名称:第1讲 计算机发展史、特点和分类应用领域与发展趋势、计算机系统组成授课班级:15级新生授课时…

基于像素自适应分割的运动目标检测算法

本文是根据M. Hofmann等人在2012年的IEEE Workshop on Change Detection上发表的“Background Segmentation with Feedback: The Pixel-Based Adaptive Segmenter”,并结合自己的理解而成的,论文转载请注明出处:http://blog.csdn.net/kezunha…

[转]this和getApplicationContext区别

this和getApplicationContext区别 public class MyActivity extends Activity { public void method() { mContext this; // since Activity extends Context mContext getApplicationContext(); mContext getBaseContext(); } }this 是因为Activity 扩展…

腾讯发布Q3财报;微软收购聊天机器人创业公司XOXCO

福特与沃尔玛合作,开展自动驾驶汽车送包裹试验;美国运营商称,5G手机可能不会很快亮相。 1.腾讯发布Q3财报,金融业务成亮点 14日晚间,腾讯发布了2018年第三季度业绩。财报显示,腾讯第三季度收入805.95亿元…

大学计算机系三年论文6000字,计算机论文6000字范文_计算机论文_计算机应用论文...

电脑信息管理论文,6000字。 写了什么样的点?计算机信息管理专业毕业论文计算机信息技术的管理尹全喜摘要:如何在计算机中积累大量的信息数据,构建稳健的信息系统是一个需要研究的话题。 本文概述了信息系统和常规信息系统结构&…

iphone开发学习运行的第一个例子

近来,抽空看了下Objective-C和IOS开发的相关教程,初衷是因为对这些比较感兴趣,本文是参考《Iphone开发基础教程》编写的一个例子。 首先运行XCode,新建一个Single View application,如下图所示: 并取名为:Button_Fun。…

别做被“干掉”的老员工

01 你觉得怎么样的人,在公司里地位最不稳定? 是刚毕业一腔热血,一个月拿几千块钱的新人。 还是跟随公司一起成长,贡献了青春的老员工。 亦或者是老板刚高薪引入公司的外来高管。 在回答这个问题之前,我想先讲一个故事。…