ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Haxe 里的 for 循环和C、Java里面的for 循环非常不同,而是更像常见的 foreach 循环。但这并不是说它是一个 foreach 循环,因为显然不是,只是某些范围相似,Haxe的 for 循环迭代对象和值而不是循环直到指定的表达式返回true 。 Haxe 的 for 循环直接关联可迭代的对象。迭代器将在后面学习,对于这个解释,你可以检查默认的迭代器:IntIter 对象。在此之前,最好是说明什么是迭代器。一个迭代器是一个对象,代表一个可迭代的值。 这可能是一个对象列表或者值的列表,包含在一个数组中,一个数值从一个指定最小的值到指定最大的值排列,甚至是字母表里的字母。迭代器通过暴露的两个方法提供值:hasNext() 和 next() 。hasNext() 方法不需要参数,如果还有更多的对象等待迭代则会返回true,否则返回false 。next() 方法也不需要参数,返回迭代堆栈里的下一个对象。 无论如何,Haxe中许多的类型和处理使用了迭代器,都会自动访问这两个方法。 for 循环是其中一个。 # IntIter对象 * * * * * 前面说过,IntIterator 是最基础的可用迭代器,也是在Haxe应用中最常用的,因为它在从一个指定Int类型值到另一个值得迭代中提供了援助。第一次实例化它为一个数组然后提供它最小值和最大值之后就可以使用 IntIterator 对象,这两个值分配给隐藏的标记为min和max的变量。然后传递一个变量标识符,和实例化的对象到for 循环来迭代,使用 in 关键字隔开它们,像这样: ~~~ var iter = new IntIterator(0,10); for ( i in iter ) trace ( i ); ~~~ 循环运行后,进行下面的步骤: 1. for 循环检查迭代器对象有可迭代的值,通过调用它的 hasNext() 方法。这个方法计算最小值是否小于最大值,并返回语句的结果。如果为true,那么至少还有一个值等待迭代,否则推出for 循环。 2. in 关键字分配迭代器的 next()方法 返回值到 in 关键字左边提供的变量。这个赋值采用和 myInt = min 相同的方式,如果要赋值的值不是一个对象,那么一个拷贝会被赋值,否则对象的引用被赋值。在IntIterator的情况里,总是赋值一个 Int 。 3. 在min被赋值后,它会被增加 1 准备进入下一个循环。一旦for 循环提供的代码呗执行,过程则重复 step 1 。 因为 min 的值必须小于 max,循环中提供的数值范围不会等于 max 变量的值。因此,在例子中,循环会输出0到9到屏幕。 当提供在for循环语句中给 in 关键字左侧的变量,不用使用 var 声明,因为变量会为你声明好。 # IntIterator操作符 * * * * * 对比其他的迭代器类型,IntIterator迭代器很特别,因为可以被声明并且通过使用迭代器操作符(...)自动实例化,可以重写前面的例子: ~~~ for ( i in 0...10 ) trace( i ); ~~~ IntIter迭代器不能以递减的方式运作,所以计算从10到0,虽然编译可以通过,但是不会执行循环。然而,你可以使用一些技巧模拟这个过程,通过从最大值减去比当前迭代值大1的: ~~~ for ( i in 0...10 ) trace( 10 - ( i + 1 ) ); ~~~