Autohotkey(v2)中重载__Enum方法的实例

2024-05-27 11:22:06
标签: it

Autohotkey (v2) 中,一个对象的__Enum 方法会在 for..in 循环中被调用,该方法的定义方式有点奇特,十分不按套路出牌。

在文档中,被 for..in 循环使用的是一种叫 Enumerator 的函数。此函数的参数是变量引用,循环变量被传入函数中并在函数执行过程被赋值,而函数的返回值是布尔型的,决定是否继续循环。

for..in 语句的最后可以是一个 Enumerator 的函数,也可以是一个一般对象。如果是一般对象,就会执行该对象的__Enum (num) 方法去返回一个 Enumerator,参数 num 是循环变量的个数,允许对不同的 num 返回不同的 Enumerator。

下面是我自己写的有顺序 Map 类中重载的__Enum 方法:

  __Enum(num){

    local i := 1 ;枚举时使用的id,每次枚举+1,直到超过this._array长度

 

    ;f1,f2分别是for循环参数是1,2个时的枚举函数

    f1(&k) {

      if (i > this.Count){ ;循环中止

        return false

      } else { ;循环继续并对循环变量赋值

        k := this._array[i]

        i += 1

        return true

      }

    }

    f2(&k, &v) { ;过程同f1,只是赋值变量多了一个

      if (i > this.Count){

        return false

      } else {

        k := this._array[i], v := this._map[k]

        i += 1

        return true

      }

    }

 

    ;根据循环变量个数不同,返回不同的枚举函数

    if (num == 1) {

      return f1

    }

    if (num == 2) {

      return f2

    }

  }



阅读(0) 收藏(0) 转载(0) 举报/Report
相关阅读

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有