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
- 附加部分