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 将引入特征参数来正确解决这个问题。