scala - Scala 构造说明

标签 scala self-type

我正忙于对一些遗留 Scala/Akka 代码进行重大重构任务,并且被一个我无法解释的结构所困扰,这阻碍了我的努力:

trait PerRequestCreator {
  this: Actor =>
  def perRequest(<some_params>): ActorRef = { body of function }
}

然后这样使用:

class SomeActor extends PerRequestCreator with Actor {
  def processRequest: Route = {
    perRequest(<some_params_passed>)
  }
}

我无法理解特征的 this: Actor => ... 部分。

最佳答案

它叫做self-type,它表达了对PerRequestCreator 的要求。混合到扩展的东西中 Actor .

它很有用,因为现在您可以使用 Actor 中定义的任何内容在 PerRequestCreator 的定义中编译器会检查你是否只能扩展 PerRequestCreator如果您还扩展 Actor .

例子:

class SomeClass extends PerRequestCreator            // this won't compile
class SomeClass extends PerRequestCreator with Actor // this is ok

您可以在这里阅读更多相关信息:https://docs.scala-lang.org/tour/self-types.html

关于scala - Scala 构造说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50620109/

相关文章:

scala - 使用scala宏时,为什么编译错误stacktrace看起来如此不连贯?

scala - 在 Scala 的父特性中声明子特性的 self 类型

scala - 在什么情况下自类型注释提供扩展无法实现的行为

scala - 在 Scala 中定义要由 case 类扩展的特征

generics - 编写比 Java 更优雅的 Copyable 接口(interface)

scala - Scala列表找到元素的最小差异

java - 与迁移到 Scala 时由 Java 养成的习惯作斗争

scala - Scala 中具有尾函数的最大元素

scala - 在 Scala 中,为什么 Array ("1")++ "-3"输出 Array[Any] = Array(1, -, 3)?

scala - 如何解释Spark的TreeNode中的TreeNode类型限制和自类型?