【问题标题】:Tuple inference fails元组推理失败
【发布时间】:2017-08-26 01:18:12
【问题描述】:

嗨,我有一个泛型 +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])

第一个工作正常。 然而最后两个都吐了:

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

为什么 scala 不能推断第二个和第三个示例中的类型?我错过了什么?

谢谢

【问题讨论】:

    标签: scala generics tuples


    【解决方案1】:

    对我来说,这看起来像是一个编译器错误。我看不出为什么它可以在第一种情况下将 String 转换为 Traversable 而在其他两种情况下不能。

    【讨论】:

      【解决方案2】:

      这段代码在 Scala 2.12.3 中编译没有错误:

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

      【讨论】:

      • MyTrait[Char, Int]上调用test1(("hello", 42))时出现编译错误。
      • 就是这样。也许它是一个特定于版本的错误?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 2017-09-16
      • 2016-04-10
      • 2021-05-06
      • 1970-01-01
      相关资源
      最近更新 更多