1
我是斯卡拉新手。 我有一個函數:Scala:通用整數返回類型?
def fromBinaryListBig(in: Array[Int]): BigInt = {
var sum = 0
in foreach (x => {sum <<= 1; sum += (x&1)})
sum
}
是否有可能使返回類型通用(整數類型,龍,智力)? 在此先感謝...
我是斯卡拉新手。 我有一個函數:Scala:通用整數返回類型?
def fromBinaryListBig(in: Array[Int]): BigInt = {
var sum = 0
in foreach (x => {sum <<= 1; sum += (x&1)})
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(...)
THX的答覆。是否有可能使「總和」也是通用的?我想避免一遍又一遍地複製相同的代碼,但只改變返回類型。 – paul
@paul數字有一個總和函數 –
@paul,我已經改變了例子返回任何數字類型的數組的總和。返回類型匹配'Array'類型。如果總和值可能溢出輸入類型,那麼你需要採用不同的方法。 – jwvh