我试图获得一个简单的功能,我有一个列表列表,我想对数据( - ,+,*,/)做一些数学运算.我希望该方法采用以下任何类型(Int,Float,Double).
这是我尝试过的:
def doSomething[T](data: List[T]){
data reduceLeft(_ / _)
}
Run Code Online (Sandbox Code Playgroud)
显示以下内容: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 (_+_)
Run Code Online (Sandbox Code Playgroud)
并得到错误:类型不匹配; 发现: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(_, _))}
Run Code Online (Sandbox Code Playgroud)
对于+, -和*它(更容易plus,minus,times分别对应).
def foo[T](l: List[T])(implicit num: Numeric[T]) = l reduceLeft (num.plus(_, _))
Run Code Online (Sandbox Code Playgroud)