我一直在论坛和Google上寻找关于Scala类型擦除问题的答案。然而,我找不到任何解答我的问题的内容。
我正在努力应对ParamClass类型参数对象的模式匹配问题。我需要在bar方法中根据传入对象的类型进行模式匹配。我看到了一些解决方案,例如:
非常感谢您提供的帮助。顺便提一句,我使用的是Scala 2.9.1。
-J
我正在努力应对ParamClass类型参数对象的模式匹配问题。我需要在bar方法中根据传入对象的类型进行模式匹配。我看到了一些解决方案,例如:
bar[X](a : X)(implicit m : Manifest[X])
这个方法可以解决我的问题,但是我不能使用它,因为bar方法已经被重写了。(实际上在Akka演员框架中是receive partial函数)。以下是代码,应该很容易理解:
class ParamClass[A : Manifest] {
def bar(x : Any) = x match {
case a: A => println("Found A: " + a)
case _ => println("No match: " + x)
}
}
object ErasureIssue {
def main(args: Array[String]) {
val clz = new ParamClass[Int]
clz.bar("faf")
clz.bar(2.3)
clz.bar(12) // this should match, but does not
}
}
ErasureIssue.main(null)
非常感谢您提供的帮助。顺便提一句,我使用的是Scala 2.9.1。
-J
def bar(x: Any)
将必然导致装箱,因此除非您有许多其他使用类型A
的方法并且在ParamClass
定义上使用@specialized
,否则您不会对原始类型获得任何性能优势。 - 0__