能用来循环数值键的通用枚举器对象.在循环中不能修改数组,否则循环的区间可能出错.可以定义自己的 MaxIndex() 函数来表示数组边界.如果在 1 和最大索引间有缺失的数组成员,仍会循环到它们但值为空.这是说这个枚举器被设计为不支持真正的数组解析
/* Class: CEnumerator 能用来循环数值键的通用枚举器对象.在循环中不能修改数组,否则循环的区间可能出错.可以定义自己的 MaxIndex() 函数来表示数组边界.如果在 1 和最大索引间有缺失的数组成员,仍会循环到它们但值为空.这是说这个枚举器被设计为不支持真正的数组解析.要在对象能使用这种循环,请在它的类定义中插入这个函数: _NewEnum() { return new CEnumerator(this) } 来源:http://www.autohotkey.com/board/topic/2667-suggestions-on-documentation-improvements/?p=531509 */ ; 对枚举器进行循环 For k, v in Test MsgBox %k%=%v% ; 用于演示的测试类 class Test { static Data := ["abc", "def", "ghi"] _NewEnum() { return new CEnumerator(this.Data) } } class CEnumerator { __New(Object) { this.Object := Object this.first := true ; 加速的缓存.当 MaxIndex() 函数性能差时用得上. ; 副作用是在循环时不能插入键值对,否则区间是错误的. this.ObjMaxIndex := Object.MaxIndex() } Next(ByRef key, ByRef value) { if (this.first) { this.Remove("first") key := 1 } else key ++ if (key <= this.ObjMaxIndex) value := this.Object[key] else key := "" return key != "" } }