假设我有以下特征
trait Feature{
val name:String
val tableName = s"${name}_table"
}
以及一个扩展它的类
class Feature1 extends Feature{
val name = "feature1"
}
但是当我初始化类并打印tableName
时,我得到“null_table”而不是“feature1_table”。我试图完全理解这是为什么。是因为 tableName
在技术上是在 Trait 中实现的,所以它在由扩展类实例化之前需要 name
的 null 值吗?
最佳答案
“技术上是在 Trait 中实现的,它在扩展类实例化名称之前采用空值” 是的。
这是解决方法。
trait Feature {
def name: String
final lazy val tableName = s"${name}_table"
}
final class Feature1 extends Feature {
override final val name = "feature1"
}
另一种选择是使用abstrac类
而不是trait
。
Scala 3 将引入特征参数来正确解决此问题。
关于Scala - 在包含未实现变量的 Trait 中使用字符串插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63122870/