Haxe 2.09无法编译[" Zebra"," Gnu"," Elephant"]。map(callback(String.toLowerCase));

时间:2014-05-24 01:16:59

标签: static lambda callback haxe

Haxe 2.09无法编译:

["Zebra", "Gnu", "Elephant"].map(callback(String.toLowerCase));

它抱怨这个错误:

String没有字段toLowerCase

虽然在不使用Lambda.map的情况下编写该行更容易,但我真的想开始使用回调功能,因为它似乎非常适合Lambda编码,如下所述:http://haxe.org/ref/callback < / p>

我想这与String.toLowerCase方法不是静态的事实有关。该文档给出的例子是:

回调(Math.pow,3)。

但是Math.pow()是静态的......

你知道如何让它发挥作用吗?

2 个答案:

答案 0 :(得分:4)

你是对的,这是因为它不是静态的,toLowerCase是在每个实例上定义的方法 - 因此你不能将它绑定到一大堆不同的字符串。

您的解决方案(创建静态函数)很好,您也可以使用非常简单的内联函数:

["Zebra", "Gnu", "Elephant"].map(function (str) return str.toLowerCase());

答案 1 :(得分:0)

我最终为我的StringExt类创建了一个函数。

["Zebra", "Gnu", "Elephant"].map(callback(StringExt.lower));

在StringExt中:

public inline static function lower(s:String):String { return s.toLowerCase(); }

不确定是否有更好的方法。