如何编写scala函数来接受两种类型的参数?
我有两个职能:如何编写scala函数来接受两种类型的参数?,scala,generics,Scala,Generics,我有两个职能: def capPredDouble(rawPred: Double): Double = { if (label == "1") { Math.min(1.0, rawPred) } else { Math.max(0, rawPred) } } def capPred(rawPred: Float): Float = { if (label == "1") { Math.min(1.0f, rawPred) } else {
def capPredDouble(rawPred: Double): Double = {
if (label == "1") {
Math.min(1.0, rawPred)
} else {
Math.max(0, rawPred)
}
}
def capPred(rawPred: Float): Float = {
if (label == "1") {
Math.min(1.0f, rawPred)
} else {
Math.max(0, rawPred)
}
}
是否可以使用多态性使它们成为一个函数?这似乎可行
def capPred[N](rawPred :N)(implicit ev :Numeric[N]) :N =
if (<some condition>) ev.min(ev.one, rawPred)
else ev.max(ev.zero, rawPred)
def capPred[N](rawPred:N)(隐式ev:Numeric[N]):N=
if()ev.min(ev.one,rawPred)
else ev.max(ev.zero,rawPred)
您实际上不需要ev.min
功能。只有math.min(ev.one,rawPred)
起作用。max也一样。我们仍然需要定义两个隐式变量,对吗?@whatsnext;不,你为什么要这么做?你试过张贴的密码吗?Numeric
type类包括类型Short
、Int
、Long
、Float
和Double
(可能还有更多)。scala.math
包自动进入范围。不需要。调用capPred(8L)
时,类型参数N
被推断为类型Long
。如果方法调用不包括第二个参数组,那么,因为它被标记为implicit
,编译器将查找Numeric[Long]
类型的隐式实例。如果找到一个(且只有一个),则将其分配给局部变量ev
。转到REPL并隐式输入[数值[Long]]
(使用Long
作为示例,在中定义了隐式)。结果,res0:Numeric[Long]=scala.math.Numeric$LongIsIntegral$@3fc2959f
,告诉我们它是math.Numeric
()中的隐式表达式。特定的隐式对象
位于第118行,它扩展了排序。对于min()
和max()
运算,长排序
,对于数学运算,长排序
特征。