gpt4 book ai didi

Scala:如何定义 "generic"函数参数?

转载 作者:行者123 更新时间:2023-12-03 06:02:13 24 4
gpt4 key购买 nike

我现在正在尝试学习 Scala,并且有一点 Haskell 的经验。对我来说奇怪的一件事是 Scala 中的所有函数参数都必须用类型进行注释 - Haskell 不需要这种类型。为什么是这样?尝试将其作为更具体的示例:add 函数的编写如下:

def add(x:Double, y:Double) = x + y

但是,这只适用于 double (好吧,由于隐式类型转换,整数也适用)。但是,如果您想定义自己的类型并定义其自己的 + 运算符,该怎么办?您将如何编写适用于定义 + 运算符的任何类型的 add 函数?

最佳答案

Haskell 使用 Hindley-Milner 类型推断算法,而 Scala 为了支持面向对象的方面,暂时不得不放弃使用它。

为了轻松地为所有适用类型编写添加函数,您需要使用 Scala 2.8.0:

Welcome to Scala version 2.8.0.r18189-b20090702020221 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_15).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import Numeric._
import Numeric._

scala> def add[A](x: A, y: A)(implicit numeric: Numeric[A]): A =
| numeric.plus(x, y)
add: [A](x: A,y: A)(implicit numeric: Numeric[A])A

scala> add(1, 2)
res0: Int = 3

scala> add(1.1, 2.2)
res1: Double = 3.3000000000000003

关于Scala:如何定义 "generic"函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1252915/

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