2017-07-31 1 views
0

Je viens de commencer à apprendre scala et l'apprentissage actuellement environ Akka à travers ce coursPeut-on définir trait à l'intérieur d'un objet dans scala

Learning Akka Je suis confus au sujet du style de code, l'auteur a créé un trait à l'intérieur d'un objet.

object MusicController { 
    sealed trait ControllerMsg 
    case object Play extends ControllerMsg 
    case object Stop extends ControllerMsg 

    def props = Props[MusicController] 

} 

Je comprends que l'objet Scala fournit la capacité singleton et une façon de définir l'ensemble méthode statique dans la classe par objet compagnon. Quelqu'un peut-il m'aider à comprendre cette syntaxe? Merci

+0

Le trait à l'intérieur d'un objet est analogue à l'interface interne statique dans java de la même manière que les méthodes à l'intérieur de l'objet sont analogues aux méthodes statiques. – Dima

Répondre

1

Vous verrez souvent ceci avec des acteurs. C'est une bonne pratique de définir les messages auxquels un acteur répond dans son objet compagnon, ce qui arrive ici.

La partie de trait scellé n'est pas vraiment nécessaire. Vous le voyez souvent dans Scala avec des classes/objets de cas. En outre, le fait qu'il soit scellé signifie que vous n'obtiendrez pas d'avertissement indiquant que votre correspondance n'est pas exhaustive lorsque le motif correspond à des occurrences de celui-ci.

+1

Correction mineure: "Aussi, le fait qu'il soit scellé signifie que vous [_will_] obtiendrez un avertissement [_if_] votre correspondance n'est pas exhaustive lorsque votre motif correspond à des instances de celui-ci." – chunjef