CEnumerator类

能用来循环数值键的通用枚举器对象.在循环中不能修改数组,否则循环的区间可能出错.可以定义自己的 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 != ""
	}
}

 

给TA捐赠
共{{data.count}}人
人已捐赠
其他

列出所有的资源管理器和 Internet Explorer 窗口

2018-1-3 13:17:39

其他

指定窗口下激活脚本的使用方法集合

2018-1-3 13:23:32

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索