gpt4 book ai didi

scala - 在类构造函数中使用特征方法

转载 作者:行者123 更新时间:2023-12-03 03:38:57 26 4
gpt4 key购买 nike

我有一个特征和一个扩展该特征的类。我可以使用特征中的方法,如下所示:

trait A {
def a = ""
}

class B(s: String) extends A {
def b = a
}

但是,当我在构造函数中使用特征的方法时,如下所示:

trait A {
def a = ""
}

class B(s: String) extends A {
def this() = this(a)
}

然后出现以下错误:

error: not found: value a

是否有某种方法可以为特征中的类构造定义默认参数?

编辑:澄清目的:有 akka-testkit:

class TestKit(_system: ActorSystem) extends { implicit val system = _system }

每个测试如下所示:

class B(_system: ActorSystem) extends TestKit(_system) with A with ... {
def this() = this(actorSystem)
...
}

因为我想在A中创建ActorSystem的公共(public)创建:

trait A {
val conf = ...
def actorSystem = ActorSystem("MySpec", conf)
...
}

最佳答案

由于 Scala 初始化顺序的原因,这有点棘手。我发现的最简单的解决方案是使用 apply 作为工厂方法为 B 类定义一个伴生对象:

trait A {
def a = "aaaa"
}

class B(s: String) {
println(s)
}

object B extends A {
def apply() = new B(a)
def apply(s: String) = new B(s)
}

关于scala - 在类构造函数中使用特征方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28904485/

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