【发布时间】:2011-01-17 02:37:00
【问题描述】:
我正在尝试让一个简单的功能在我有一个列表列表的情况下工作,并且我想对数据(-、+、*、/)进行一些数学运算。我希望该方法采用以下任何类型(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
有什么办法可以解决吗?
【问题讨论】:
-
第一个
for中的data是什么? -
抱歉数据是一个List[List[T]]。
-
我想出了一种方法,就是将它包含在参数化类中。但是,我仍然想知道为什么上述方法不起作用?特别是如果我想将此方法用作函数对象。
-
这似乎行不通,因为
times要求两个参数的类型相同,在这种情况下,不能保证data的基础类型T 和dot的类型 T 是同一类型。如果您想避免参数化类,请尝试传递给函数data参数以及 -
例如
def dot[T](data: List[List[T]])(l: List[List[T]])(implicit num: Numeric[T]) = ...,然后使用dot(data) _
标签: scala