Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写scala函数来接受两种类型的参数?_Scala_Generics - Fatal编程技术网

如何编写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()
运算,长排序
,对于数学运算,长排序
特征。