gpt4 book ai didi

Scala 类型别名破坏了类型兼容性

转载 作者:行者123 更新时间:2023-12-03 17:40:09 27 4
gpt4 key购买 nike

我一直相信如果需要,类型别名总是会扩展到它们的原始类型。但是,这里有一个麻烦制造者

def a[P](a: Option[P]) = {
type Res = List[P] // result type alias
Nil: Res // Replace this line with Nil: List[P] to clear the error
}
def b[V](v: V) = a(Some(v)): List[V]

它失败了( scastie )
error: type mismatch;
found : Res (which expands to) List[P]
required: List[V]

你看 a转换 Option[P] => List[P]并且,因为 b用品 Some[V] , a转换 Option[V] => List[V]b称它。但是,编译器说结果与 List[V] 不兼容.这怎么可能?如果您替换 Nil: Res,错误就会消失( scastie )与 Nil: List[P]a .您需要消除类型别名以消除错误。这意味着类型别名是罪魁祸首。

最佳答案

我几乎可以肯定这是一个编译器错误。 Scala 中的类型别名应该自动扩展,在这种情况下看起来像 a 的类型。推断为 [P](Option[P]) => Res , 而不是 [P](Option[P]) => List[P] .并且由于 Res 在内部作用域内,编译器无法找到它来推断 b 的类型。正确。

关于Scala 类型别名破坏了类型兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38041980/

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