gpt4 book ai didi

scala - 在抽象构造函数中访问覆盖的 val 时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-04 15:15:34 27 4
gpt4 key购买 nike

考虑以下(简化的)示例:

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 上。)

最佳答案

“为什么我的抽象或覆盖的 val 为空?” https://github.com/paulp/scala-faq/wiki/Initialization-Order

关于scala - 在抽象构造函数中访问覆盖的 val 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4701749/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com