Scala:通用整数返回类型?

时间:2017-04-20 04:49:30

标签: scala generics

我是Scala的新手。 我有一个功能:

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

是否可以使返回类型通用(整数类型,Long,Int)? 提前谢谢......

2 个答案:

答案 0 :(得分:2)

如果匹配泛型参数,则可以使用泛型返回类型...

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

...但是你不能根据某些内部条件(例如累积和的值)得到不同的(通用的)返回类型。

答案 1 :(得分:0)

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

r, g, b, alpha = "rgba(255, 0, 0, 0.5)".scan(/[\d.]+/)
r # => "255"
g # => "0"
b # => "0"
alpha # => "0.5"

这意味着调用者确定了返回类型,因此他们可以编写例如

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))