有人可以告诉我这个函数定义有什么问题吗?
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)
^
这里有什么问题?
答案 0 :(得分:7)
使用def incr[Int]
,您已定义了名为Int
的任意类型,该类型会覆盖现有类型。摆脱[Int]
类型参数,它可以正常工作,或使用其他名称,如T
。
答案 1 :(得分:2)
Luigi说的对我有用。我不确定为什么你会想要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)