gpt4 book ai didi

scala:类型不匹配错误 - 找到 T,需要字符串

转载 作者:行者123 更新时间:2023-12-04 22:15:26 25 4
gpt4 key购买 nike

我正在学习 Scala,这个问题可能很愚蠢,但是......为什么?

例如,这是可以的:

def matchList(ls: List[Int]): List[Int] = ls match {
case 1 :: rest => rest
case a :: b :: rest => (a + b) :: rest
case _ => ls
}

matchList: (ls: List[Int])List[Int]

但是带有类型参数的函数不会编译:
def matchList[T](ls: List[T]): List[T] = ls match {
case 1 :: rest => rest
case a :: b :: rest => (a + b) :: rest
case _ => ls
}

<console>:10: error: type mismatch;
found : T
required: String
case a :: b :: rest => (a + b) :: rest

为什么?

最佳答案

对于任何类型的 T 操作 T + T 没有任何意义。 (所有类型都支持 + 吗?不。考虑添加两条狗或两个员工。)

在您的情况下,正在调用字符串连接运算符(通过 any2stringadd pimp 添加),其返回类型(显然)是 String 。因此出现错误消息。

您需要的是一种 方法来指定类型 T 必须支持将两个 T 类型的值组合以生成 T 类型的新值的操作。 ScalazSemigroup 完全符合要求。

以下工作:

def matchList[T : Semigroup](ls: List[T]): List[T] = ls match {
case 1 :: rest => rest
case a :: b :: rest => (a |+| b) :: rest // |+| is a generic 'combining' operator
case _ => ls
}

关于scala:类型不匹配错误 - 找到 T,需要字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com