gpt4 book ai didi

scala - 在不使用惰性 val 的情况下在特征初始化中避免 NPE

转载 作者:行者123 更新时间:2023-12-01 08:14:18 25 4
gpt4 key购买 nike

这可能包含在 blog entry 中作者:Jesse Eichar——我仍然不知道如何更正以下 不诉诸懒惰的 vals 以便固定 NPE:

给定的

trait FooLike { def foo: String }
case class Foo(foo: String) extends FooLike

trait Sys {
type D <: FooLike
def bar: D
}

trait Confluent extends Sys {
type D = Foo
}

trait Mixin extends Sys {
val global = bar.foo
}

第一次尝试:
class System1 extends Mixin with Confluent {
val bar = Foo("npe")
}

new System1 // boom!!

第二次尝试,改变mixin顺序
class System2 extends Confluent with Mixin {
val bar = Foo("npe")
}

new System2 // boom!!

现在我同时使用 barglobal非常严重,因此我不想仅仅因为 Scala (2.9.2) 没有正确初始化而支付惰性 val 税。该怎么办?

最佳答案

您可以使用 early initializer :

class System1 extends {
val bar = Foo("npe")
} with Mixin with Confluent {
// ...
}

scala> new System1
res3: System1 = System1@1d0bfedd

关于scala - 在不使用惰性 val 的情况下在特征初始化中避免 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12647326/

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