gpt4 book ai didi

scala - 为什么在嵌套类型参数时 Scala 不能完全推断类型参数?

转载 作者:行者123 更新时间:2023-12-03 23:27:02 25 4
gpt4 key购买 nike

考虑以下 Scala 代码:

abstract class A
abstract class B[T <: A]
class ConcreteA extends A
class ConcreteB extends B[ConcreteA]

class Example[U <: B[T], T <: A]( resolver: U )
object Test {
new Example( new ConcreteB )
}

最后一行 new Example( new ConcreteB )编译失败,出现以下错误:

error: inferred type arguments [ConcreteB,Nothing] do not conform to class Example's type parameter bounds [U <: B[T],T <: A]



但是 ConcreteB有解决 U 和 T 的所有必要数据。我在这里遗漏了什么?

最佳答案

基普顿接近了他更高级的解决方案。不幸的是,他被 Scala < 2.9.1.RC1 中的一个 bug 绊倒了。以下在 2.9.1.RC1 和主干上按预期工作,

Welcome to Scala version 2.9.1.RC1 (Java HotSpot(TM) Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.

scala> abstract class A
defined class A

scala> abstract class B[T <: A]
defined class B

scala> class ConcreteA extends A
defined class ConcreteA

scala> class ConcreteB[T <: A] extends B[T]
defined class ConcreteB

scala> class Example[T <: A, U[X <: A] <: B[X]](resolver: U[T])
defined class Example

scala> new Example(new ConcreteB[ConcreteA])
res0: Example[ConcreteA,ConcreteB] = Example@ec48e7

关于scala - 为什么在嵌套类型参数时 Scala 不能完全推断类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6892781/

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