Scala:泛型整数返回类型?

Scala:泛型整数返回类型?,scala,generics,Scala,Generics,我是斯卡拉的新手。 我有一个功能: def fromBinaryListBig(in: Array[Int]): BigInt = { var sum = 0 in foreach (x => {sum <<= 1; sum += (x&1)}) sum } def fromBinaryListBig(in:Array[Int]):BigInt={ var总和=0 在foreach(x=>{sum中,如果与泛型参数匹配,则可以使用泛型返回类型 def fr

我是斯卡拉的新手。 我有一个功能:

def fromBinaryListBig(in: Array[Int]): BigInt = {
  var sum = 0
  in foreach (x => {sum <<= 1; sum += (x&1)})
  sum
}
def fromBinaryListBig(in:Array[Int]):BigInt={
var总和=0

在foreach(x=>{sum中,如果与泛型参数匹配,则可以使用泛型返回类型

def fromBinaryListBig[N:Numeric](in: Array[N]): N = in.sum

…但您无法根据某些内部条件(例如累积总和的值)获得不同的(通用)回报类型。

技术上,是的,很有可能:

def fromBinaryListBig[A](in: Array[Int])(implicit ev: Integral[A]): A = {
  var sum = ev.zero
  val two = ev.fromInt(2)
  in foreach (x => {sum *= two; sum += ev.fromInt(x&1)})
  sum
}
这意味着调用者确定返回类型,以便他们可以写入

val x = fromBinaryListBig[Byte](Array(0, 1, 0, 1, 0, 0, 0))
或指定所需的类型

val x: BigInt = fromBinaryListBig(...)

谢谢你的回复。有没有可能“求和”也是泛型的?我希望避免重复复制相同的代码,但只更改返回类型。@paul Numeric有一个和function@paul,我更改了示例以返回任何数字类型的
数组
的和。返回类型与
数组
类型匹配。如果和值可能溢出输入类型,则n您需要采用不同的方法。