Scala 这是:SomeObject=>;对象构造

Scala 这是:SomeObject=>;对象构造,scala,Scala,我正在阅读关于实现Slick的最佳实践,并且正在研究。其中有这样一种结构: trait BankRepository extends BankTable { this: DBComponent => ... //A bunch of code } 我不理解这个:DBComponent=>部分。在本例中,DBComponent是在别处定义的一个简单特征(您可以在上面的链接中找到)。我不明白的是: this:DBComponent=>构造做什么。我的IDE没有抱怨,但它也没有链接到由

我正在阅读关于实现Slick的最佳实践,并且正在研究。其中有这样一种结构:

trait BankRepository extends BankTable { this: DBComponent =>
   ... //A bunch of code
}
我不理解
这个:DBComponent=>
部分。在本例中,
DBComponent
是在别处定义的一个简单特征(您可以在上面的链接中找到)。我不明白的是:

  • this:DBComponent=>
    构造做什么。我的IDE没有抱怨,但它也没有链接到由
    =>
    执行的函数。我的直觉是,它说代码的其余部分是返回的值,但我不清楚调用它的是什么,或者返回的值到底是什么
  • 这个构造叫什么?与许多符号密集的结构一样,很难查找/找到的文档,因为它显然依赖于上下文。但即使是描述上下文也很困难。这个结构叫什么
    • 它被称为自我类型。它基本上是一个契约,规定任何扩展此特性的类(将其混入)必须包含
      DBComponent
      。因此,编译器应该假定
      dbcompent
      元素在以下代码的范围内

      下面是对Scala编程的一个描述,Odersky等人,第一版(有点过时,但在大多数主题上仍然准确)。

      它被称为自我类型。它基本上是一个契约,规定任何扩展此特性的类(将其混入)必须包含
      DBComponent
      。因此,编译器应该假定
      dbcompent
      元素在以下代码的范围内


      下面是对Scala编程的详细描述,Odersky等人,第一版(虽然有点过时,但在大多数主题上仍然准确)。

      有趣!你有关于这个的文档链接吗?此外,这应该被视为一个神奇地提升到类型描述的单行程序,还是后面的内容会影响它?举例来说,我能把它放在特性的中间吗?我只在特征/类代码的顶部看到过它。IntelliJ IDE的一些快速实验表明,如果它不在顶部,编译器会拒绝它。我的实验得出了相同的结果,但我不确定编译器是如何在大括号中获取类型信息的。(远远超出了我对编译器的理解)谢谢你的帮助!有趣的你有关于这个的文档链接吗?此外,这应该被视为一个神奇地提升到类型描述的单行程序,还是后面的内容会影响它?举例来说,我能把它放在特性的中间吗?我只在特征/类代码的顶部看到过它。IntelliJ IDE的一些快速实验表明,如果它不在顶部,编译器会拒绝它。我的实验得出了相同的结果,但我不确定编译器是如何在大括号中获取类型信息的。(远远超出了我对编译器的理解)谢谢你的帮助!