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 ) );
~~~
- 本书目录
- 第一章:Haxe介绍
- 互联网开发的一个问题
- Haxe是什么,为什么产生
- Haxe编译工具
- Haxe语言
- Haxe如何工作
- 那么Neko是什么
- Haxe和Neko的必须条件
- 本章摘要
- 第二章:安装、使用Haxe和Neko
- 安装Haxe
- 使用Haxe安装程序
- 在Windows上手动安装Haxe
- Linux上手动安装Haxe
- 安装Neko
- Windows上手动安装Neko
- 在Linux上安装Neko
- Hello world! 一式三份
- 编译你的第一个Haxe应用
- 你的程序如何编译
- HXML编译文件
- 编译到Neko
- 编译为JavaScript
- 程序结构
- 编译工具开关
- 本章摘要
- 第三章:基础知识学习
- Haxe层级结构
- 标准数据类型
- 变量
- 类型推断
- 常数变量
- 简单的值类型
- 浮点类型
- 整型
- 选择数值类型
- 布尔类型
- 字符串类型
- 抽象类型
- Void 和 Null
- 动态类型
- unknown类型
- 使用untyped绕过静态类型
- 注释代码
- 转换数据类型
- Haxe数组
- Array
- List
- Map
- Haxe中使用日期时间
- 创建一个时间对象
- Date组件
- DateTools类
- 操作数据
- 操作符
- Math类
- 使用String函数
- 本章摘要
- 第四章:信息流控制
- 数据存放之外
- 条件语句
- if语句
- switch语句
- 从条件语句返回值
- 循环
- while循环
- for循环
- 循环集合
- Break和Continue
- 函数
- 类的函数
- 局部函数
- Lambda类
- 本章摘要
- 第五章:深入面向对象编程
- 类和对象
- 实例字段
- 静态字段
- 理解继承
- Super
- 函数重载
- 构造器重载
- toString()
- 抽象类和抽象方法
- 静态字段,实例变量和继承
- 继承规则
- 使用接口
- 高级类和对象特性
- 类的实现
- 类型参数
- 匿名对象
- 实现动态
- Typedef
- 扩展
- 枚举
- 构造器参数
- 本章摘要
- 第六章:组织你的代码
- 编写可重用代码
- 使用包
- 声明一个包
- 隐式导入
- 显式导入
- 枚举和包
- 类型查找顺序
- 导入一个完整的包
- 导入库
- Haxe标准库
- Haxelib库
- 其他项目中的库
- 外部库
- 使用资源
- 文档化代码
- 离线文档
- 在线文档
- 单元测试
- haxe.unit包
- 编写测试
- 本章摘要
- 第七章:错误调试
- trace函数
- trace输出
- haxe的trace和ActionScript的trace
- 异常
- 异常处理
- CallStack和ExceptionStack
- 异常管理类
- 创建完全的异常处理类
- 异常类代码
- 本章摘要
- 第八章:跨平台工具
- XML
- XML剖析
- Haxe XML API
- 正则表达式
- EReg类
- 模式
- 定时器
- 延迟动作
- 队列动作
- MD5
- 本章摘要
- 第九章:使用Haxe构建网站
- Web开发介绍
- Web 服务器
- 使用Web服务器发布内容
- HTML速成课程
- Haxe和HTML的区别
- NekoTools Web Server
- Apache安装mod_neko
- Windows安装Apache和mod_neko
- Linux安装Apache和Mod_Neko
- 第一个Haxe网站
- 使用Neko作为网页Controller
- neko.Web类
- Neko作为前端控制器
- 本章摘要
- 第十章:使用模板进行分离式设计
- 什么是模板
- Template类
- Template语法
- 使用资产
- 何时在模板中使用代码
- 服务器端模板的Templo
- 安装Templo
- 使用Templo
- haxe.Template和mtwin.Templo表达式上的区别
- Attr表达式
- Raw表达式
- 逻辑表达式
- 循环表达式
- set, fill, 和 use表达式
- Templo中使用宏
- 手动编译模版
- 第十一章:执行服务端技巧
- 第十二章:使用Flash构建交互内容
- 第十三章:使用IDE
- 第十四章:通过JavaScript制作更多交互内容
- 第十五章:通过Haxe远程通信连接所学
- 第十六章:Haxe高级话题
- 第十七章:Neko开发桌面应用
- 第十八章:用SWHX开发桌面Flash
- 第十九章:多媒体和Neko
- 第二十章:使用C/C++扩展Haxe
- 附加部分