参数化表示不按预期工作

  • 本文关键字:工作 表示 参数 scala
  • 更新时间 :
  • 英文 :


我想在List上运行参数化的mean,但是它会抛出编译错误:

def mean[A](xs: Seq[A])(implicit num: Numeric[A]): Option[A] = {
import num._
if (xs.isEmpty) None
else Some(xs.sum / xs.size)
}

cmd11.sc:4: value / is not a member of type parameter A
else Some(xs.sum / xs.size)
^Compilation Failed

这种方法有什么问题?

Scala的数值层次结构在很多地方与Haskell相似。特别是,Numeric不支持除法,因为有很多有用的类型可以相加和相乘,但不能除(矩阵是一个主要的例子)。

你要找的是Fractional。您还需要将xs.size(这是一个Int)转换为您的泛型A,这可以用Fractional.fromInt完成。

def mean[A](xs: Seq[A])(implicit num: Fractional[A]): Option[A] = {
import num._
if (xs.isEmpty) None
else Some(xs.sum / fromInt(xs.size))
}

相关内容

  • 没有找到相关文章

最新更新