4

为什么这段代码会产生错误

def test[A](a: List[A], f: A => A) = a.map(f)

println(test(List(1,2,3), _*2))

error: missing parameter type for expanded function ((x$2) => x$2.$times(2))

Scala 不应该能够判断 A 是 Int 吗?

4

2 回答 2

7

您需要第二个参数列表才能使其正常工作。我不确定规范中是如何定义的,但是我以前见过。

scala> def test[A](a: List[A])(f: A => A) = a.map(f)
test: [A](a: List[A])(f: (A) => A)List[A]

scala> test(List(1))(_+1)
res1: List[Int] = List(2)
于 2012-12-13T20:42:49.740 回答
1

这就是示例,如何在不更改任何内容的情况下使其适用于您的情况。

scala> println(test(List(1,2,3), (i: Int) => i * 2 ))

Scala 的类型推断是有限的,有时你应该帮忙!

这是文章充分利用 Scala 的(极其有限的)类型推断

于 2014-06-19T20:09:39.030 回答