Я пытаюсь придумать родовую функцию (toBitSet) с помощью параметра типа T.Типа в Scala с общей функцией
def toBitSet[T:Integral](x:T, valueBitwidth:Int, filterBitwidth:Int, bigEndian:Boolean = true, shift:Int = 0) = {
BitSet((for (i <- 0 to (valueBitwidth - 1) if (((x & 0xFF) >> i) & 1) == 1) yield (i + shift)): _*)
}
byteToBitSet и shortToBitSet функции specializaton родового функции.
def byteToBitSet(x:Byte, filterBitwidth:Int, bigEndian:Boolean = true, shift:Int = 0) = {
toBitSet[Byte](x = x, valueBitwidth = 8, filterBitwidth = filterBitwidth, bigEndian = bigEndian, shift = shift)
}
def shortToBitSet(x:Short, filterBitwidth:Int, bigEndian:Boolean = true, shift:Int = 0) = {
toBitSet[Short](x = x, valueBitwidth = 16, filterBitwidth = filterBitwidth, bigEndian = bigEndian, shift = shift)
}
Однако Scala не понимает операторы (>>, &, ==, +) на тип T, чтобы показать сообщение об ошибке. Я указал, что T
является интегральным типом, но он не работает.
Как решить эту проблему?
С таким объявлением вы вводите неявный параметр для своего метода типа «Интеграл [T]». Аналогом Scala для '' является '[T <: SomeType]' –
Aliaxander