【发布时间】:2017-02-09 04:46:18
【问题描述】:
在使用像FastUtils 这样的框架和Scala 时,由于框架本身具有专门的数据结构,您如何根据有效的专门化生成适当的代码?即,您如何以编程方式确定什么是专门化的并执行适当的代码?那么在这种情况下如何处理与路径相关的类型。
对于objects
class Container[@specialized T](var window: Int) {
val data = new ObjectArrayList[T](window)
}
对于char,我希望它是:
class Container[@specialized T](var window: Int) {
val data = new CharArrayList(window)
}
但这应该基于T的特化。如果我换一种说法,sudo 代码可能会像
class Container[@specialized T](var window: Int) {
val data = specialisationOf(T) match {
case "Char" => new CharArrayList(window)
case "Int" => new IntegerArrayList(window)
...
...
...
case _ => new ObjectArrayList[T](window)
}
}
【问题讨论】:
-
我已经在做手工专业化了。我想做的是用最少的重新定义。感谢您的指针,但这并不能解决我所追求的问题..
-
您在问题中所写的方式是不可能的,因为不同的
ArrayList类型没有具有专用方法的通用超类型。在(几乎)每个对data的方法调用上,您都必须再次执行match并转换为最具体的类型。这可能只是用装箱开销代替了运行时手动类型比较的开销。
标签: scala collections types specialization fastutil