gpt4 book ai didi

scala - 卡在类型不匹配

转载 作者:行者123 更新时间:2023-12-02 10:50:39 27 4
gpt4 key购买 nike

我正在研究99 Scala Problems并遇到了对#27 - Group Elements of a Set into Disjoint Subsets的困扰。我已经编写了一个可以完成所有工作的辅助函数,唯一的问题是我遇到了类型不匹配错误。功能如下:

def addGroupN[T](gs: List[List[List[T]]], n: Int): List[List[List[T]]] = {
gs.flatMap(xss => combinations(n, list diff xss.flatten).map(xs => xss :+ xs))
}
list的类型为 List[T],而函数 combinations返回 List[List[T]]。编译器正在计算它的类型为 List[List[List[Any]]],因此与签名不匹配。

我不太关心样式/惯用语的建议,而比我更好地掌握如何正确地推理类型评估的关注程度小。除了回答如何正确地编写它以匹配正确的签名之外,一些指示该函数以其当前形式可以返回除 List[List[List[T]]]之外的任何内容的方法也将有所帮助。

编辑:
combinations的完整签名是
def combinations[T](n: Int, list: List[T]): List[List[T]]

最佳答案

listList[T]到底是什么?
TaddGroup方法的通用参数。如果list在方法之外定义,则它不能是具有相同List[T]T

假设你有

class YourCode[T]  {

val list: List[T]

def addGroup[T](....)

}
T中的 addGroup参数只是隐藏 T中的 YourCode,它们是两种不同的类型。您可以将其重命名为 U,而无需更改任何内容,除非明确说明。这样做,在 list diff xss.flatten中, listList[T]类型, xss.flattenList[U]TU是两个不同的类型参数,可以是任何类型(无界),最好的通用父类(super class)型是 Any,因此 diffList[Any]而不是预期的 List[T]。从那里,您最后得到 List[List[List[Any]]]

关于scala - 卡在类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16931340/

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