Scala 参数化方法和算术运算

标签 scala

我正在尝试让一个简单的功能在我有一个列表列表的情况下工作,并且我想对数据(-、+、*、/)进行一些数学运算。我希望该方法采用以下任何类型(Int、Float、Double)。

这是我尝试过的:

def doSomething[T](data: List[T]){
 data reduceLeft(_ / _)
}

显示如下:值/不是类型参数T的成员。

如何让它适用于 AnyVal 类型(Double、Int、Float)?

更新我尝试在以下代码中实现建议:

def dot[T](l: List[List[T]])(implicit num: Numeric[T]) = 
{

    for (row <- data)
        yield for(col <- l)
            yield row zip col map {a => num.times(a._1 , a._2)}   reduceLeft (_+_)

并得到错误:类型不匹配;找到:a._1.type(带有底层类型 T) 需要:T

有什么办法可以解决吗?

最佳答案

除法:

def foo[T](l: List[T])(implicit num: Numeric[T]) = num match{
     case i: Integral[_] => l reduceLeft (i.quot(_, _))
     case fr: Fractional[_] => l reduceLeft (fr.div(_, _))}

对于 +、- 和 * 更容易(分别为 plusminustimes):

def foo[T](l: List[T])(implicit num: Numeric[T]) = l reduceLeft (num.plus(_, _))

关于Scala 参数化方法和算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4709571/

相关文章:

scala - 如何组合两个具有zio效果和不同类型环境的Http4s路由

python - Python REPL 中是否有与 Scala 的 REPL 类似的功能来引用以前的计算?

scala - 具有默认值的函数的方法签名

scala - 案例类的隐式解析和伴随对象

scala - 是否可以创建带有命名参数的部分应用函数?

java - 在 Scala 中处理 BZIP 字符串/文件

scala - Spark : save and load machine learning model on s3

scala - 在 Spark/Scala 中保持本地、测试和生产配置属性的最佳实践

java - 对于 Playframework 2.x 部署推荐的应用程序服务器是什么?

scala - 无法导入 play.api.db.databases