使用“_”的Scala功能图

时间:2011-07-11 19:34:53

标签: scala

为什么(在Scala REPL中)我可以编写,例如,

def double(d: Int) = 2*d
(0 until 10).zipWithIndex.map(i => double(i._1))

或只是

(0 until 10).zipWithIndex.map(_._1)

但我不能写

(0 until 10).zipWithIndex.map(double(_._1))
error: missing parameter type for expanded function ((x$1) => x$1._1) (0 until 10).zipWithIndex.map(double(_._1))

1 个答案:

答案 0 :(得分:11)

Scala尝试在 _._1内展开double 。所以,它认为你想拥有

(0 until 10).zipWithIndex.map(double(i => i._1))

但是,它也发现i => i._1并不真正适合double的一个参数类型,因此它会抱怨并要求您提供类型提示来帮助编译器。但是,在这种情况下,没有正确的类型定义,因此错误消息在那里是错误的。