gpt4 book ai didi

scala - 在 Scala 中进行模式匹配时类型推断不正确

转载 作者:行者123 更新时间:2023-12-04 01:10:24 26 4
gpt4 key购买 nike

在下面的 ADT 中,为什么 Foo 被错误地推断为它的类型参数 S

sealed trait Sum[-S, +A]

case class Foo[S]() extends Sum[S, S]

def execute[S, A](mqtt: Sum[S, A], s: S): A =
mqtt match {
// S and A should be the same for Foo
case Foo() => s // should compile but returns an error.
}

scastie 上的链接 https://scastie.scala-lang.org/xD4RqwKYRW20dy4K0GHEDg enter image description here

最佳答案

您正在调用方法 execute有两个不同的类型参数 SA并且编译器没有证据表明它们相同。

因此,当您尝试返回 S 类型的对象时当方法签名需要 A 时你得到一个错误。这与 ADT 无关。

如果你给编译器一些关于类型参数的更多细节,你就可以让它工作。比如这个def execute[A, S<:A]

关于scala - 在 Scala 中进行模式匹配时类型推断不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65027470/

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