Scala参数化方法和算术运算

时间:2011-01-17 02:37:00

标签: scala

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

这是我尝试过的:

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

显示以下内容:value /不是类型参数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

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:9)

对于师:

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(_, _))