为什么我要做
trait Compiler {
var printInstruction: String
}
class JavaCompiler extends Compiler {
var printInstruction = "System.out.print(arg0);"
}
而不是
trait Compiler {
var printInstruction: String
}
class JavaCompiler extends Compiler {
printInstruction = "System.out.print(arg0);"
}
当
trait Compiler {
var printInstruction: String
def printInstruction: String
}
给出编译错误。
答案 0 :(得分:8)
因为您没有在特征Compiler
中初始化变量。这意味着您希望任何扩展Compile
的人都定义行为的变量。
例如,以下内容有效:
class Example extends Compiler {
var _printInstruction = "foo"
def pritnInstruction = "I don't care about setter"
def pritnInstruction_=(pi: String) = _printInstruction = pi
}
如果您希望能够使用
class JavaCompiler extends Compiler {
printInstruction = "System.out.print(arg0);"
}
然后在Compiler
特征中初始化你的var:
trait Compiler {
var printInstruction: String = _
}
答案 1 :(得分:0)
覆盖变量通常不是您想要做的事情。如果你想要表现的东西,如var
,甚至可能是一个,你可以这样做:
trait Compiler {
def printInstruction: String
def printInstruction_=(s: String): Unit
}
class JavaCompiler {
var printInstructions = "System.out.print(arg0);"
}
不知何故,我认为这不是你想要的。那么......你有什么不解释你真正打算完成的事情,所以我们可以更好地建议如何去做?