2017-08-26 11 views
3

こんにちは、ジェネリック+ Tと+ Uの特性を持っています。タプル推論が失敗する

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]) 

最初のものは正常です。 最後の2は、しかし、両方が吐き出す:

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

なぜScalaは2番目と3番目の例の種類を推測することはできませんか?私は何が欠けていますか?

ありがとう

答えて

1

これは私にとってコンパイラのバグのようです。最初のケースではStringからTraversableに変換できる理由はありませんが、他の2つのケースでは発生しません。

0

このコードがエラーなしでScalaの2.12.3でコンパイル:あなたは `MyTrait [シャア、INT]の` TEST1(( "こんにちは"、42)) ``を呼び出すとき

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

コンパイルエラーが発生。 –

+1

これはまさにそれです。バージョン固有のバグでしょうか? – Vangogh500