gpt4 book ai didi

scala - 在 Scala 中类型推断为 Nothing

转载 作者:行者123 更新时间:2023-12-04 00:59:13 25 4
gpt4 key购买 nike

当我尝试编译这个小例子时:

trait Foo[A,B] {
type F[_,_]
def foo(): F[A,B]
}

class Bar[A,B] extends Foo[A,B] {
type F[D,E] = Bar[D,E]
def foo() = this
}

object Helper {
def callFoo[A,B,FF <: Foo[A,B]]( f: FF ): FF#F[A,B] =
f.foo()
}

object Run extends App {
val x = new Bar[Int,Double]
val y = Helper.callFoo(x)
println( y.getClass )
}

我收到错误:
[error] src/Issue.scala:20: inferred type arguments
[Nothing,Nothing,issue.Bar[Int,Double]] do not conform to method callFoo's type
parameter bounds [A,B,FF <: issue.Foo[A,B]]
[error] val y = Helper.callFoo(x)

显然,类型推断机制无法从 Bar[A,B] 中推断出 A 和 B。但是,如果我手动传递所有类型,它会起作用:
val y = Helper.callFoo[Int,Double,Bar[Int,Double]](x)

我有办法避免显式传递类型吗?

最佳答案

您必须更改 callFoo 的签名对此:

def callFoo[A, B, FF[A, B] <: Foo[A, B]](f: FF[A, B]): FF[A, B]#F[A, B] =

你必须告诉编译器 FF实际上是一个参数化类型。

关于scala - 在 Scala 中类型推断为 Nothing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com