2017-06-19 2 views
1

Ich lerne Scala und fand diesen Code im Quellcode des Buches, aber keine tatsächliche Erklärung dafür in dem Buch. Ich habe Details aus Gründen der Einfachheit entfernt.Kann jemand diesen Scala-Code erklären?

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

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

Ich frage mich, was diese this: RefModel => ist und was dies zu tun annehmen.

Antwort

1

Das bedeutet trait ExecutionModel Notwendigkeit RefModel komponieren, wenn ExecutionModel Klasse initiieren. und dieser Begriff heißt self type, es bedeutet ExecutionModel brauchen eine RefModel für diese Klasse.

es wird oft von Kuchenmuster für Abhängigkeit Injektion. so können Sie es gerne verwenden:

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

Dokument: Cake Pattern

1

Es bezeichnet ist als „Selbst Typ“, was bedeutet, dass die Selbst (diese) den angegebenen Typ sein, als auch als den Typ (Klasse oder Merkmal) definiert werden.

Betrachten Sie es als eine Anweisung an den Compiler: Lassen Sie dieses Merkmal (ExecutionModel) nicht instanziiert werden, es sei denn RefModel ist im Mixin enthalten. Das bedeutet, dass Mitglieder des RefModel für den Definitionscode ExecutionModel verfügbar sind.

Verwandte Themen