2016-07-21 7 views
0

Gegeben:Grenzen für Typ-Mitglieder innerhalb eines Typs Alias ​​in Scala

trait Record { 
    type ID 
    val id: ID 
} 

trait DataSource { 
    type ID 
    def read(id: ID): Try[R] 
} 

Ich möchte in der Lage sein, die allgemein die read Funktion zu beschreiben.

type Reader[R <: Record, DS <: DataSource] = (DS#ID) => Try[R] 

Wie kann ich garantieren, Typsicherheit hier, so dass DS#ID wird kein unähnlich Typ wie R#ID sein? Ich habe versucht ...

type Reader[R <: Record, DS <: DataSource, R#ID <: DS#ID] = (DS#ID) => Try[R] 

Aber das kompilieren doens't. Was ist die korrekte Syntax für diese Situation?

Antwort

0

Beim Umgang mit den Typparametern Reader muss ID als eigener Parameter herausgezogen werden.

type Reader[R <: Record, DS <: DataSource, ID] = (ID) => Try[R] 

Sobald dies erledigt ist es möglich ist, um dann zusätzliche Grenzen auf sie zu setzen ...

type Reader[R <: Record, DS <: DataSource, ID <: DS#ID =:= R#ID] = (ID) => Try[R] 
Verwandte Themen