2017-08-26 2 views
3

Hallo, also ich habe eine Eigenschaft mit Generika + T und + U.Tupel-Inferenz schlägt fehl

def test[I >: T, V >: U](e: Traversable[I], f: V) 
def test[I >: T, V >: U](e: (Traversable[I], V)) 
def test[I >: T, V >: U](e: Tuple2[Traversable[I], V]) 

Die erste funktioniert gut. Die letzten 2 jedoch spucken beide aus:

type mismatch; 
[error] found : (String, Int) 
[error] required: (Traversable[?], ?) 

Warum kann scala nicht die Typen in der 2. und 3. Beispiele schließen? Was vermisse ich?

Danke

Antwort

1

Das sieht für mich wie ein Compiler Bug aus. Ich sehe keinen Grund, warum es im ersten Fall String zu Traversable konvertieren kann, aber nicht die anderen zwei Fälle.

0

Dieser Code kompiliert in Scala 2.12.3 ohne Fehler:

trait MyTrait[+T, +U] { 
    def test[I >: T, V >: U](e: Traversable[I], f: V) 
    def test1[I >: T, V >: U](e: (Traversable[I], V)) 
    def test2[I >: T, V >: U](e: Tuple2[Traversable[I], V]) 
} 
+2

Der Kompilierung-Fehler tritt auf, wenn Sie rufen 'test1 (("Hallo", 42))' auf 'MyTrait [Char, Int]' . –

+1

Das ist genau das. Vielleicht ist es ein versionsspezifischer Bug? – Vangogh500