AutoHotKey面向对象编程

news2024/12/23 8:04:24

文章目录

    • **初步认识**
    • 类和继承
    • 枚举属性和For循环
    • 数组和映射

初步认识

AHK中,对象就是一种内部封装了属性和方法的变量,而和常见的面向对象编程语言不同的是,这里面的属性和方法是可以动态添加的。下面举一个最简单的例子

person := {}                ; 创建对象.
; 下面添加两条对象属性
person.name := "micro"      
person.age := 18
; 添加自我介绍的方法
person.say := say
say(this){
    MsgBox "我是" this.name ",今年" this.age "岁"
}

Capslock::person.say()

效果如下

在这里插入图片描述

类和继承

AHK也支持通过类的实例化来创建对象的方法,并且支持对class的继承,下面仍以person举例,做一个class

; AHK不分大小写,这里只是习惯大写开头
class Person{
    __New(name, age){
        this.name := name
        this.age := age
    }
    say(){
        MsgBox "我是" this.name ",今年" this.age "岁"
    }
}

Capslock::{
    p := Person("micro", 18)
    p.say()
}

其中,__New函数为Person类的构造函数,在调用Person创建对象时,就会自动执行__New函数中的内容。

通过关键字extends可以实现对类的继承,比如在Person类的基础上创建一个Student

class Student extends Person{
    No := 0
}
; 更改大写锁定键的映射
Capslock::{
    p := Person("micro", 18)
    p.no := 2
    MsgBox p.no
}

枚举属性和For循环

之前在介绍循环时,留下了For循环这个尾巴,这是因为并非所有对象都适用于For循环,除非类中声明了__Enum属性,下面以学生类举例,来详细解释一下For循环的用法

class Student extends Person{
    Grade := [80, 90, 95, 98, 100]
    __Enum(num){
        local i := 1
        f(&k){
            if(i>5){
                return false
            }else{
                k := this.Grade[i]
                i += 1
                return true
            }
        }
        return f
    }
}

Capslock::{
    p := Student("micro", 18)
    for g in p{
        MsgBox g
    }
}

然后,再重新载入脚本,并按下大写锁定键,就会出现下面这样的效果

在这里插入图片描述

其中,Grade是一个数组,可采取方括号的创建方式,并且通过方括号和数字进行索引。

__Enum即为For..in循环中调用的函数,其输入参数num表示for..in中间迭代参数的个数。

数组和映射

数组和映射是AHK内置的两种对象,也相当于是两种数据结构,这两种对象中均封装了__Enum函数,从而支持For循环。而且支持两种for循环调用方式,假设lst是一个数组,这两种方式如下

lst = ["a", "b", "c"]
for L in lst{
    MsgBox L
}

for i,L in lst{
    MsgBox i ":" L
}

前者迭代的是lst中的值,即a,b,c;后者则迭代lst中的序号和值,其输出依次为1:a2:b3:c

作为一种对象,数组除了可以通过方括号初始化之外,还可以调用Array函数,

lst = Array(1,2,3,4,5)

此外,还封装了一些便捷的函数,包括插入元素InsertAt;追加内容Push;移除元素RemoveAt;移除最后一项Pop,以lst为例

lst.InsertAt(3, "c", "d")   ;在位置3处插入c,d
lst.push("e","f")   ;在数组结尾添加e, f

映射在AHK中的另一个名字是关系数组,可以理解为索引不为正整数的数组,或者理解为键值对数组,其创建方式如下

Map("ten", 10, "twenty", 20, "thirty", 30)
; 对应关系为 ten => 10; twenty => 20; thirty => 30

Map也支持For循环,示例如下

For key, value in MyMap
    MsgBox key ' = ' value

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vi/vim 如何在PowerShell里粘贴内容

vi/vim 如何在PowerShell里粘贴内容 Shift 鼠标右键 Vi/Vim 有两种主要的模式:命令模式和插入模式。 要进入命令模式,只需按下英文输入状态下的冒号(:)键。一旦进入命令模式,您可以在底部的命令行中输入各种命令。例…

【实战】爬虫风险业务防控 | 国际航班上,小“票代”在疯狂倒卖高价票

目录 乘坐国际航班,躲不开的“票代” 小“票代”的网络爬虫与高价票 某公司国际航班遭遇大量爬虫攻击 基于爬虫风险的分析与防控建议 顶象防御云业务安全情报中心监测发现,某航空国际航班,遭遇恶意网络爬虫的持续攻击。高峰时期&#xff…

C#Winform抽屉式导航栏实例讲解

Winform在UI界面设计时不如WPF灵活,如实现抽屉式导航栏功能不是很容易。 本文讲解如何采用简单代码量较少的实现该功能。 先上效果: 项目过程: 首先创建winform项目 在项目中添加对应的控件,控件列表如下: 代码如下: using System; using System.Collections.Gen…

【openeuler】openEuler kernel 技术分享 - 第2期 - 从ARM和RISC-V架构看体系结构对Linux操作

openEuler kernel 技术分享 - 第2期 - 从ARM和RISC-V架构看体系结构对Linux操作系统的支持_哔哩哔哩_bilibili The RISC-V Reader: An Open Architecture Atlas http://riscvbook.com/chinese/RISC-V-Reader-Chinese-v2p1.pdf

深入浅出设计模式 - 状态模式

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌ Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收…

Day05

目录 1、编写mybatis插件,实现字段自动填充 注意 2、ThreadLocal的简单使用 3、问题:添加员工语句执行成功,但数据库中未添加新员工 4、问题:foreach 1、编写mybatis插件,实现字段自动填充 如何编写插件 Interc…

Jmeter之BeanShell Assertion自定义断言

在JMeter性能测试工具中,BeanShell Assertion是一种强大而灵活的自定义断言方法。 它允许用户通过编写BeanShell脚本来验证服务器返回的响应数据,从而确保系统在各种负载下的稳定性和可靠性。 无论您是初学者还是有经验的专业人士,使用Bean…

Element ui 取消点击空白处弹框关闭的效果

目录 属性: 描述 属性: element组件库的Dialog对话框默认是可以通过点击 modal 关闭 Dialog,即点击空白处弹框可关闭。 描述 在 el-dialog中close-on-click-modal含义是:点击空白处是否关闭,默认true;如…

python实现固定资产梳理的办法

一、需求; 需求:实现xxx地固定资产的计算以及梳理 1.盘点资产,通过excel表格设计了不同的区域,进行每个区域的资产的计数工作,成为了一个登记事项 2.后续形成文本汇报工作,梳理内容 3.需求把表格中同类…

2023金九银十跳槽必会Java核心知识点笔记整理

现在互联网大环境不好,互联网公司纷纷裁员并缩减 HC,更多程序员去竞争更少的就业岗位,整的 IT 行业越来越卷。身为 Java 程序员的我们就更不用说了,上班 8 小时需要做好本职工作,下班后还要不断提升技能、技术栈&#…

沐曦与百度飞桨完成兼容性测试,助力计算机视觉应用发展

近日,沐曦集成电路(上海)有限公司(以下简称“沐曦”)的曦思N100人工智能推理GPU与百度飞桨完成 I 级兼容性测试。测试结果显示,双方兼容性表现良好,整体运行稳定。这是沐曦自2022年9月加入“硬件…

五子棋AI智能算法的测试方法

先前发了几篇五子棋游戏程序设计的博文,设计了游戏程序,也设计了AI智能奕棋的算法,运行程序检测算法的可行性,完成人机模式游戏功能的设置。本文重点介绍测试方法。 对于人机对战的电脑智能应子算法,参阅很多五子棋书…

React项目请求接口跨域设置代理怎么设置

在src 目录下创建setupProxy.js const {createProxyMiddleware} require(http-proxy-middleware)module.exports function(app) {app.use(createProxyMiddleware(/api, { //api1是需要转发的请求(所有带有/api1前缀的请求都会转发给5000)target: http://172.20.17.199:808…

学习Kotlin~函数

有名函数 函数参数 不打算传入值参,可以预先给参数指定默认值 //如果不打算传入值参,可以预先给参数指定默认值private fun fix(name: String, age: Int 2) {println(name age);}//调用的时候fix("hhhh");fix("hasee", 30);有名的…

【Html】Html+Less实现一个简单的加载动画

效果 运行环境 系统&#xff1a;Win10系统 IDE&#xff1a;Visual Studio Code v1.79.2 VSCode插件&#xff1a;Easy LESS v2.0.0 index.html代码 <!DOCTYPE html> <html><head><title>加载动画</title><link rel"stylesheet" hr…

Android的Context详解 - 揭开Context的神秘面纱

这篇文章是基于我四年前的一篇文章进行更正和深入探究。背景是&#xff0c;2019年4月份我在找工作&#xff0c;看到一个问题&#xff0c;问this&#xff0c;getBaseContext()、getApplication()、getApplicationContext()的区别。当时我写了简单的demo验证&#xff0c;得出了跟…

看看螯合物前体多肽试剂DOTA-E[c(RGDfK)2]的全面解析吧!

【产品描述】 DOTA-E[c(RGDfK)2]螯合物前体多肽试剂&#xff0c;RGD肽指含有Arg-Gly-Asp三个氨基酸组成的序列多肽&#xff0c;可以提供大量的RGD直线肽&#xff0c;RGD环肽&#xff0c;RGD双环肽、RGD模拟肽等&#xff0c;也可以根据客户需求定制RGD肽。 DOTA-E [c (RGDfK) 2…

6.3 B树

多路平衡查找树 1.定义 B树的阶&#xff1a;B树中所有结点的孩子个数的最大值&#xff0c;表示成m m阶B树&#xff1a;空树或者满足如下特性的m叉树 特性&#xff1a; 1.树中每个结点最多子树 m 关键字m-1 2.根节点不是终端结点&#xff0c;至少有两棵子树 3.根结点除外&…

Java 遍历List的两种方式

可参考文章 Notepad编译并运行java代码_notepad怎么运行java代码_西晋的no1的博客-CSDN博客 中的第二种方法测试下述代码。 在java中&#xff0c;可以使用for循环和使用for-each循环两种方式遍历List。 1.使用for循环遍历List 2.使用for-each遍历List 注意&#xff1a;使用for-…

Java使用Maven工程操作OpenGL ES绘制三角形和圆形;绘制完成后操作键盘控制然图形移动

OpenGL ES 绘制三角形&#xff0c;操作键盘移动位置 PS&#xff1a;想快速看到效果的小伙伴&#xff0c;可以在引入依赖后&#xff0c;先跳到完整代码部分 第一步&#xff1a;依赖引入 <properties><lwjgl.version>3.2.3</lwjgl.version><joml.version&…