2017-06-19 22 views
1

私はScalaを学んでおり、このコードは本のソースコードにありますが、実際の説明は本書にはありません。私は簡単にするために詳細を削除しました。誰かがこのScalaコードを説明できますか?

trait RefModel { 
    type Instrument = String 
    type Account = String 
} 

trait ExecutionModel {this: RefModel => 
    case class Execution(account: Account, instrument: Instrument) 
} 

私はこのthis: RefModel =>が何であるか、これが何をすると思いますか?

答えて

1

これはtrait ExecutionModelExecutionModelクラスを開始したときにする必要がRefModelを構成します。この用語は自己タイプと呼ばれ、ExecutionModelはこのクラスにはRefModelが必要です。

ケーキパターン依存性注入です。あなたが好きな、それを使用することができます。

object Foo extends ExecutionModel with RefModel // when initiate **ExecutionMode** bind with **RefModel** 

は、Document:Cake Pattern

1

それは、自己(これは)(指定されたタイプである必要がありますだけでなく、タイプされていることを意味する「セルフタイプ」と呼ばれていますクラスまたは形質)が定義されている。

コンパイラへの指示と考える:RefModelがmixinに含まれていない限り、この特性(ExecutionModel)のインスタンス化を許可しないでください。つまり、ExecutionModel定義コードのメンバーはRefModelです。

関連する問題