【发布时间】:2016-03-30 21:47:55
【问题描述】:
我正在尝试使用类型参数 T 提出一个通用函数 (toBitSet)。
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 函数是泛型函数的特化。
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是Integral类型,但是它不起作用。
如何解决这个问题?
【问题讨论】:
-
通过这样的声明,您可以为
Integral[T]类型的方法引入一个隐式参数。 Scala 对<T extends SomeType>的模拟是[T <: SomeType]
标签: scala generics polymorphism type-parameter