In der folgenden Funktion wird der Scala Compiler der Lage, den Rückgabetyp auf den kleinsten gemeinsamen geordneter Typ der Werte in den if/else Ausdruck verwendet, um zu definieren:definieren gemeinsame untere Grenzen von Parametern
def cond(b: Boolean, t: A, f: B) = if (b) t else f
Berücksichtigung der folgenden Hierarchie:
class X
class A extends X
class B extends X
die Funktion cond
oben als zurückkehr einen Wert vom Typ X
definiert ist.
Wenn jedoch A
und B
Typ Parameter in der Definition der cond
Funktion sind, ist deren Rückgabetyp Any
:
def cond[A, B](b: Boolean, t: A, f: B) = if (b) t else f
Ist es möglich, den Compiler zu machen, den kleinsten gemeinsamen Supertyp des Typs verwenden Parameter?
Ich habe versucht, einige Varianten der folgenden, ohne Erfolg:
def cond[A, B, R >: A with B](b: Boolean, t: A, f: B): R = if (b) t else f
def cond[A, B, R](b: Boolean, t: A, f: B)(implicit ev1: A <:< R, ev2: B <:< R): R = if (b) t else f
EDIT: Die Frage oben zu stark vereinfacht wird. In der Tat hatte mein eigentliches Problem einer der Parameter des Typs bereits gelöst:
class C[A](b: Boolean, t: A) {
def cond[B](f: B) = if(b) t else f
}