ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[warning] 定义:Lambda > Lambda 是一个函数式语言概念,在Haxe中它允许你应用一个函数到一个列表或者迭代(第6.7节)。Lambda 类是一个函数方法的集合,以使Haxe使用函数风格编程。 通过 using Lambda(查看静态扩展(第6.3节))它被完美的使用,然后作为一个 Iterator 类型的扩展。 在静态目标平台,使用 Iterator 结构可能慢于直接对已知类型执行操作,比如 Array 和 List 。 ## Lambda 函数 Lambda 类允许我们一次操作一整个迭代。这通常是更好的循环方式,因为它不太容易出错,并且更易读取。方便起见,Array 和 List 类包含一些频繁使用的Lambda 类中的方法。 查看一个例子。exists 函数被指定为: ~~~ static function exists<A>( it : Iterable<A>, f : A -> Bool ) : Bool ~~~ 多数Lambda 函数以同样的方式调用。所有Lambda 函数的第一个参数都是要操作目标的 Iterator 。有许多也把一个函数作为一个参数。 * **Lambda.array,Lambda.list** 转换Iterator 为 Array 或 List 。它总是返回一个新的实例。 * **Lambda.count** 计算元素的数量。如果可迭代的是一个 Array 或者 List,则使用它们更快速的 length 属性。 * **Lambda.empty** 确定是否可迭代对象为空。对于所有可迭代对象最好使用这个函数;也快于对比length属性(或者 Lambda.count 的结果)是否为0。 * **Lambda.has** 确定是否特定元素存在于可迭代对象中。 * **Lambda.exists** 确定是否条件是可以被一个元素满足的。 * **Lambda.indexOf** 找出某个特定元素的索引。 * **Lambda.find** 找到给定搜索函数的第一个元素。 * **Lambda.foreach** 确定是否每个元素满足一个条件。 * **Lambda.iter** 对每个元素调用一个函数。 * **Lambda.concat** 合并两个可迭代对象,返回一个新的 List 。 * **Lambda.filter** 找到满足一个条件的元素,返回一个新的 List 。 * **Lambda.map, Lambda.mapi** 应用一个转换到每个元素,返回一个新的 List 。 * **Lambda.fold** 功能性折叠,也被称为缩小、积聚、压缩或者注入。 这个例子演示了Lambda的 filter 和 map 函数对一组字符串的操作: ~~~ using Lambda; class Main { static function main() { var words = ['car', 'boat', 'cat', 'frog']; var isThreeLetters = function(word) return word.length == 3; var capitalize = function(word) return word.toUpperCase(); // Three letter words and capitalized. trace(words.filter(isThreeLetters).map(capitalize)); // [CAR,CAT] } } ~~~ 这个例子演示了 Lambda的 count,has ,foreach 和 fold 函数操作一组整数: ~~~ using Lambda; class Main { static function main() { var numbers = [1, 3, 5, 6, 7, 8]; trace(numbers.count()); // 6 trace(numbers.has(4)); // false // test if all numbers are greater/smaller than 20 trace(numbers.foreach(function(v) return v < 20)); // true trace(numbers.foreach(function(v) return v > 20)); // false // sum all the numbers var sum = function(num, total) return total += num; trace(numbers.fold(sum, 0)); // 30 } } ~~~ 查看 Lambda API 了解所有可用的函数。