[基础] AHK函数对象系列-绑定方法对象v3
文章编号-AHK-J003-绑定方法对象
缘由
希望用户在对象创建时就能够直接为成员方法绑定某键,如果这个功能不能实现,那么用户就需要在脚本里手动创立,一旦对象多了,就特别麻烦。
大概一周之前“绑定函数对象”实现了,参见[基础] AHK函数对象系列-绑定函数对象,今天“绑定方法对象”也实现了。在这里分享一下案例,希望对大家的程序设计能够起到帮助。_
绑定方法对象介绍
重要提醒:如果您对“方法”/“构造方法”/“对象”等基础知识没有接触的话,建议先查阅一下相关资料。另外针对这三个常用的概念,我会在文章后面用斜体特别的作出解释。
绑定方法对象也属于广义的“函数对象”,通过“绑定方法对象”,可以实现在成员方法之间更灵活的相互引用(比如用于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,得到许可并标明出处和原链接后方可转载。未经授权,禁止转载。
作者:心如止水