有人可以解释这个Scala代码吗?
问题描述:
我正在学习Scala,并在本书的源代码中找到了此代码,但在本书中没有对此进行实际解释。为了简单起见,我删除了详细信息。有人可以解释这个Scala代码吗?
trait RefModel {
type Instrument = String
type Account = String
}
trait ExecutionModel {this: RefModel =>
case class Execution(account: Account, instrument: Instrument)
}
我想知道这this: RefModel =>
是什么,这是假设做什么。
答
这意味着trait ExecutionModel
需要撰写RefModel
时发起ExecutionModel
类。并且这个术语叫做自我类型,这意味着ExecutionModel
需要一个RefModel
这个类。
它经常使用饼图为依赖注入。所以你可以使用它像:
object Foo extends ExecutionModel with RefModel // when initiate **ExecutionMode** bind with **RefModel**
文件:Cake Pattern
答
它被称为“自我型”,这意味着自(本)必须是指定的类型,以及作为类型(类或特质)被定义。
认为它是编译器指令:不允许,除非RefModel
包括在混入被实例化这个特点(ExecutionModel
)。这意味着RefModel
的成员可用于ExecutionModel
定义代码。