Lambda 类包含一些方法来以函数式编程风格的方式修改数组和迭代器的内容。很大程度上,多数方法只是在你之前看到的一些局部方法上的一些变化,不同的是,它们比之前看到的影响不同的集合。
Lambda类提供如下方法:
|Lambda方法|描述|
| -- | -- |
|array< A >(it:Iterable< A >):Array< A >|从Iterable< A >创建 Array< A > ,返回Iterable< A >中元素数量|
|count< A >(it: Iterable< A >):Int|返回Iterable< A >中元素数量|
|empty(it: Iterable< Dynamic >):Bool|验证一个可迭代对象是否不包含任何元素|
|exists< A >(it: Iterable< A >, f:A->Bool):Bool|是否至少有一个迭代元素的对象通过指定函数被找到|
|filter< A >(it:Iterable< A >,f:A->Bool):List< A >|返回符合指定函数的元素列表|
|fold(A,B)(it:Iterable< A >,f:A->B->B, first:B):B|在Iterator< A >上执行fold(折叠)功能|
|foreach< A >(it:Iterable< A >,f:A->Bool):Bool|是否所有迭代对象的元素有f指定的属性|
|has< A >(it:Iterable< A >, elt:A,?cmp:A->A->Bool):Bool|是否某个元素是迭代对象的部分|
|iter< A >(it:Iterable< A >,f:A->Void):Void|应用函数到Iterable< A >的每个元素|
|list< A >(it:Iterable< A >):List< A >|从Iterable< A >创建一个List|
|map< A,B >(it:Iterable< A >, f:A->B):List< B >|通过应用指定函数从Iterable< A >创建一个Iterable< B >|
|mapi< a,b >(it:Iterable< A >,f:Int->A->B):List< B >|和map类似,但是同时会传递每个迭代项的索引|
# map() 和 mapi()
* * * * *
map 和 mapi 方法和List集合的map方法非常相似,不同的是Lambda.map 接收一个迭代器作为第一个参数,返回一个新的迭代器,而Lambda.mapi 执行相同的功能,还传递一个索引到处理函数。这里是两个方法的例子:
~~~
class Mapping {
public static function main()
{
var myArr : Array < Int > = [1, 2, 3, 4];
var newIter : Iterator < Int > ;
var funIter = function( x : Int ) : Int
{
return x * 2;
}
newIter = Lambda.map( myArr, funIter );
// Outputs: 2, 4, 6, 8
for ( i in newIter ) trace( i );
}
}
~~~
# array() 和 list()
* * * * *
从一个Array或者List创建迭代器很简单,因为它们都暴露了 iterator() 方法。然而,从迭代器创建一个List或者Array 呢?这正是 Lambda.array() 和Lambda.list() 做的。其中最大的好处是,它们可以非常快速和简单的转换一个 Array 到一个 List ,通过这些代理方法反之亦然:
~~~
var myArr : Array < Int > = [ 1, 2, 3, 4 ];
// Creates the List from the Array
var myLst : List < Int > = Lambda.list( myArr );
// Recreates the Array from the List
myArr = Lambda.array( myLst );
~~~
# fold()
* * * * *
fold 函数非常有用,因为它会使你从一个迭代器应用一个接收每个元素并返回一个基于和开始值计算得出的值的函数生成一个值。这个值然后被带入下一个计算调用下一个迭代器中的值。例如,你传递 fold 函数一个迭代器包含一个整数的列表,一个开始的整数值,和一个带入两个整数并对齐相加的函数。结果就是迭代中所有项相加的和加上开始的整数值:
~~~
class FoldList
{
public static function main()
{
var arr : Array < Int > = [1,2,3,4,5];
var fun : Int - > Int - > Int = function( a : Int, b : Int ) : Int
{
return a + b;
}
var initialValue : Int = 22;
// Outputs: 37
trace(Lambda.fold(arr, fun, initialValue));
}
}
~~~
- 本书目录
- 第一章: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
- 附加部分