我正在尝试为数值定义一个通用的加法函数:
def add[A](x:A, y:A): A = {
x + y
}
控制台:16:错误:类型不匹配;
找一个
要求:字符串
x + y
^
编译器在提示什么?
我在谷歌上搜索过的一些东西现在对我来说不太有意义。
最佳答案
既然你定义了 A
没有边界和额外信息,它可以是任何类型,并且没有任何 Scala 类型具有 +
方法 - 所以这不能编译。
错误消息是编译器尝试隐式转换 x
的结果。转换为字符串(因为 String 有一个 +
方法,并且每种类型都可以使用 toString
转换为字符串),但是它失败了,因为 y
不是字符串。
要为所有数字类型创建方法,您可以使用 Numeric
类型:
def add[A](x:A, y:A)(implicit n: Numeric[A]): A = {
n.plus(x, y)
}
add(1, 3)
add(1.4, 3.5)
编辑 : 或等效的语法:
def add[A: Numeric](x:A, y:A): A = {
implicitly[Numeric[A]].plus(x, y)
}
关于scala - 为什么以下 scala 实验代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41217907/