scala - 为什么以下 scala 实验代码不起作用?

标签 scala functional-programming

我正在尝试为数值定义一个通用的加法函数:

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/

相关文章:

scala - 在 OO 中编码标准 ML 模块

scala - Slick 3.0.0 - 仅使用非空值更新行

java - 在 Java 8 中,如何应用此过滤器?

javascript - 这是纯函数式的吗?在嵌套(类似闭包)函数中使用一个值

scala - 猫效应 IO : Compose IO with Scala collections

scala - sbt:选择主类进行运行

scaladoc 玩!带有 Scala 模块的框架

scala - 如何在 scala 中自动重新运行 sbt 项目

functional-programming - Clojure 中的命名参数函数

regex - 正则表达式 f#