如何将继承的变量从特征传递给辅助构造函数
我正在寻找值 bork 并将它传递给一个类到构造函数中的类中。
trait dog {
lazy val bork = "bork"
}
class Animal(val firstName: String, dogCommand: DogCommand) extends dog{
def this(firstName: String) {
this(firstName, DogCommand(bork))
}
def getDogCommand(): Unit = {
dogCommand.getCommand()
}
}
case class DogCommand(command: String) {
def getCommand() :Unit = {
println(command)
}
}
val myDog = new Animal("first")
myDog.getDogCommand()
我通常会得到 - 错误:未找到:值 bork
回答
问题是这bork是一个值,dog但没有dog可从中读取的实例bork。this是一个构造函数,因此它无法访问正在构造的值。
这是一种保留大部分原始代码的解决方案:
trait dog {
def bork = dog.DefaultBork
}
object dog {
val DefaultBork = "bork"
}
class Animal(val firstName: String, dogCommand: DogCommand) extends dog {
def this(firstName: String) = this(firstName, DogCommand(dog.DefaultBork))
...
}
您可以考虑删除borkin的默认值,dog以便任何实现 trait 的类都需要为 提供值bork。(DefaultBork如果想保留默认值可以一直使用)