4

有人可以告诉我这个函数定义有什么问题吗?

def incr[Int](l: List[Int]): List[Int] = 
  l.foldRight(List[Int]())((x,z) => (x+1) :: z)

Scala 编译器抱怨传递给的函数体中的类型不匹配foldRight

<console>:8: error: type mismatch;
 found   : Int(1)
 required: String
           l.foldRight(List[Int]())((x,z) => (x+1) :: z)
                                                ^

这里有什么问题?

4

2 回答 2

7

您已经定义了def incr[Int]一个任意类型,名称为Int,它会覆盖现有的类型。摆脱[Int]类型参数,它可以正常工作,或者使用不同的名称,如T.

于 2012-11-20T03:11:59.623 回答
2

路易吉说的对我有用。我不确定您为什么需要 type 参数,因为您已经将输入指定为 Int 列表:

def incr(l: List[Int]): List[Int] = l.foldRight(List[Int]())((x,z) => (x+1) :: z)

incr(List(1,2,3))                 //> res0: List[Int] = List(2, 3, 4)

但在旁注中,与实际问题无关,如果这是预期的结果,另一种方法可能是:

def incr2(l:List[Int]):List[Int] = l map (_+1)
于 2012-11-20T04:35:16.863 回答