【发布时间】:2011-01-16 04:35:18
【问题描述】:
考虑以下(简化的)示例:
abstract class Bar[T] {
val f: PartialFunction[T, T]
val default: PartialFunction[T, T] = { case x => x }
val chained = f orElse default
}
class Foo extends Bar[Int] {
val f: PartialFunction[Int, Int] = { case 1 => 2 }
}
然后看着它崩溃:
scala> val foo = new Foo
java.lang.NullPointerException
at Bar.<init>(<console>:8)
at Foo.<init>(<console>:6)
at .<init>(<console>:7)
at .<clinit>(<console>)
at RequestResult$.<init>(<console>:9)
at RequestResult$.<clinit>(<console>)
at RequestResult$scala_repl_result(<console>)
....
但是,如果我们将chained 放在具体类中:
abstract class Bar[T] {
val f: PartialFunction[T, T]
val default: PartialFunction[T, T] = { case x => x }
}
class Foo extends Bar[Int] {
val f: PartialFunction[Int, Int] = { case 1 => 2 }
val chained = f orElse default
}
它按预期工作:
scala> val foo = new Foo
foo: Foo = Foo@16132c4
我不得不承认我完全不知道这里发生了什么。漏洞? (这是在 Scala 2.8.1 上。)
【问题讨论】:
-
请参阅此问题以获取解决方案/解决方法:stackoverflow.com/questions/4712468/…
标签: scala