如何基于专业化运行和不同的代码路径

时间:2016-09-30 14:52:01

标签: scala collections types specialization fastutil

在使用像Scala这样的FastUtils这样的框架时,如何根据有效的专业化生成适当的代码,因为框架本身具有专门的数据结构?即,您如何以编程方式弄清楚什么是专业化并执行适当的代码?那么在这种情况下你如何处理与路径相关的打字。

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

1 个答案:

答案 0 :(得分:1)

正如this question中已经解释的那样,您可以将专用实现封装在类型类中。这看起来或多或少类似于以下代码。

add

请注意,虽然data的实现看起来总是相同,但add上调用的方法每次都是不同的重载。如果您以更多态的方式编写此代码,则不会选择最具体的Int方法,并且您的CharINSERT into mytable(id, tp, booleanOne, classification, booleantwo, created_at) SELECT distinct uttv.id, true, false, uttv.type, false, uttv.created_at FROM userTable tt WHERE booleantwo = false AND type is not null AND tt.id in ( SELECT id from userTable WHERE status=12 AND booleantwo=false AND booleanThree=false UNION SELECT id FROM userTable WHERE status=19 ) AND not exists (select 1 from mytable rre where rre.id = tt.id) 将需要加框。