下面的代码说类型List[Any]
的表达式不符合预期的类型List[List[Int]]
def tran(l1:List[List[Int]]):List[List[Int]] ={
if(l1.isEmpty) Nil
else
l1.head.head :: tran(l1.tail) // Type mismatch is happening here
}
下面的代码执行正常,没有问题
def tran1(l1:List[List[Int]]):List[List[Int]] = {
if (l1.isEmpty) Nil
else
l1.head.tail :: tran1(l1.tail) // This is executing fine
}
答案 0 :(得分:0)
您期望使用列表列表,因此应将列表添加到:List(l1.head.head)
def tran(l1: List[List[Int]]): List[List[Int]] = {
if (l1.isEmpty) Nil else List(l1.head.head) :: tran(l1.tail) // Type mismatch is happening here }
}
答案 1 :(得分:0)
tran1(l1.tail)
的类型为List[List[Int]]
(返回类型为tran1
),而l1
的类型为List[List[Int]]
。
但是,l1.head.head
不是List[Int]
类型。它是Int
类型。
因此,在第一种情况下,您尝试在Int
类型的对象之前添加List[List[Int]]
。
这就是为什么在第一种情况下会出现类型不匹配错误的原因。
现在,在第二种情况下,l1.head.tail
的类型为List[Int]
,而您尝试将其前缀为List[List[Int]]
类型的对象,即tran1(l1.tail)
。这就是为什么这里没有错误。