Scala - 在包含未实现变量的 Trait 中使用字符串插值
Scala - using string interpolation inside Trait containing unimplemented variable
说我有以下特质
trait Feature{
val name:String
val tableName = s"${name}_table"
}
和扩展它的 class
class Feature1 extends Feature{
val name = "feature1"
}
但是当我初始化 class 并打印 tableName
时,我得到的是“null_table”而不是“feature1_table”。我试图完全理解为什么会这样。是不是因为 tableName
在技术上是在 Trait 中实现的,它在可以通过扩展 class 实例化之前采用 name
的空值?
”在技术上是在 Trait 中实现的,它在可以通过扩展 class” 实例化之前采用 name 的空值。
这是解决方法。
trait Feature {
def name: String
final lazy val tableName = s"${name}_table"
}
final class Feature1 extends Feature {
override final val name = "feature1"
}
另一种选择是使用 abstrac class
而不是 trait
。
Scala 3 将引入特征参数来正确解决这个问题。
说我有以下特质
trait Feature{
val name:String
val tableName = s"${name}_table"
}
和扩展它的 class
class Feature1 extends Feature{
val name = "feature1"
}
但是当我初始化 class 并打印 tableName
时,我得到的是“null_table”而不是“feature1_table”。我试图完全理解为什么会这样。是不是因为 tableName
在技术上是在 Trait 中实现的,它在可以通过扩展 class 实例化之前采用 name
的空值?
”在技术上是在 Trait 中实现的,它在可以通过扩展 class” 实例化之前采用 name 的空值。
这是解决方法。
trait Feature {
def name: String
final lazy val tableName = s"${name}_table"
}
final class Feature1 extends Feature {
override final val name = "feature1"
}
另一种选择是使用 abstrac class
而不是 trait
。
Scala 3 将引入特征参数来正确解决这个问题。