我想概括这个功能
def selfSufficiency(a: Seq[Double], b: Seq[Double]): Double =
a.sum/b.sum
我尝试使用here提供的构想来实现更通用的功能,该功能可用于Doubles,Floats,Ints等。
def selfSufficiency[A](a: Seq[A], b: Seq[A])
(implicit n: Numeric[A]):A = {
import n._
a.sum/b.sum
}
但是我从eclipse那里得到一句话
value /不是类型参数A的成员。
1-如何以功能/通用的方式实现此功能?
2-我的实现是否限制用户为两个输入使用相同的类型“ A”?换句话说,我可以使用我的代码吗?
selfSufficiency(Seq(1,2,3), Seq(2.0,1.3))
如果我做不到,请说明如何实施?
请注意,此处的代码提供了一个玩具示例。在生产函数中,我加,减,找到较大的数字,等等。
答案 0 :(得分:3)
问题在于Numeric
不对除法函数进行编码-您需要Fractional
。
因此您的代码变为
def selfSufficiency[A](a: Seq[A], b: Seq[A])
(implicit n: Fractional[A]):A = {
import n._
a.sum/b.sum
}
现在可以使用了。
修改 我刚刚阅读了您问题的这一部分。
我的实现是否限制用户为两个输入使用相同的类型“ A”?换句话说,我可以使用我的代码吗?
由于Fractional
和Numeric
都仅在一个T
中进行了参数设置,因此两个参数都必须来自同一类型-例如,看看div
function。
但是,由于精度较低的数值是(图1)数值较高的子类型。您可以通过upcast使它正常工作,但需要更多帮助编译器。
selfSufficiency[Double](Seq(1,2,3), Seq(2.0,1.3)) // res1: Double = 1.8181818181818183
注意:如果不将类型指定为Double
,则编译器将产生以下错误。
error: could not find implicit value for parameter n: Fractional[AnyVal]
图1
答案 1 :(得分:0)
您要寻找的是Fractional特性,它是支持div
的更窄的数字(子类型)。