【问题标题】:Cannot infer secondary type argument无法推断辅助类型参数
【发布时间】:2017-03-24 10:33:17
【问题描述】:

当我尝试编译以下代码时:

case class A(str: String)
case class B[T <: A](t: T)

def f[T <: A, X <: B[T]](x: X) = {}

f(B(A("str")))

我收到以下错误:

推断类型参数 [Nothing,B[A]] 不符合方法 f 的 类型参数范围 [T <: a b>

为什么编译器不能推断出 T 属于 A 类型?

【问题讨论】:

    标签: scala


    【解决方案1】:

    当你说:

    X <: B[T]
    

    您正在定义一个没有类型参数的新类型 X,该类型 确实 具有混淆 Scala 编译器的类型参数。你实际上失去了 T,因此失去了 A。

    您需要创建一个类型 X[C <: a b t x>

    因此,您的示例可以很好地编译以下内容:

    def f[T <: A, X[C <: A] <: B[C]](x: X[T])= {}
    

    【讨论】:

    • 谢谢。我一直在寻找似乎是很久以前的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2018-05-07
    相关资源
    最近更新 更多