我正在尝试使用一个简单的功能来工作,我有一个列表列表,我想对数据( - ,+,*,/)进行一些数学运算。我希望该方法采用以下任何类型(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
有没有办法解决这个问题?
答案 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(_, _))}
对于+, - 和*它更容易(分别为plus
,minus
,times
):
def foo[T](l: List[T])(implicit num: Numeric[T]) = l reduceLeft (num.plus(_, _))