我最近了解了蛋糕图案以及和的用法之间的区别self =>
(self:T =>
请参阅此处)。这里提到的这些技术细节和真正的 Scala 代码之间的差异继续给我带来问题。例如,请参阅以下来自Inox 项目的代码片段:
trait Trees
extends Expressions
with Constructors
with Extractors
with Types
with Definitions
with Printers
with TreeOps { self =>
...
val interpolator: Interpolator { val trees: Trees.this.type } = new {
protected val trees: Trees.this.type = Trees.this
} with Interpolator
...
}
总之,整个片段对我来说没有多大意义(这是代码中经常重复的模式),让我解释一下:
- 这是什么语法?
val interpolator: Interpolator { ... }
到目前为止,我写了val name: Type = value
,这里没有平等。
Trees.this.type
应该是一个类型,但是什么类型呢?它应该在 Trees trait 中定义,并且this
我打赌的trait Trees
上下文与上下文不同(与问题 1 相关)。我还查看了文件插值器,但似乎没有类型元素。最大的线是
protected val trees: Trees.this.type = Trees.this
.
谁能解释一下这里发生了什么?