gpt4 book ai didi

arrays - Scala 类型推断 : can't infer IndexedSeq[T] from Array[T]

转载 作者:行者123 更新时间:2023-12-04 15:22:08 24 4
gpt4 key购买 nike

在 Scala 2.11.2 中,以下最小示例仅在使用 时编译类型归属 Array[String] :

object Foo {    

def fromList(list: List[String]): Foo = new Foo(list.toArray : Array[String])

}

class Foo(source: IndexedSeq[String])

如果我删除 fromList 中的类型归属,它将无法编译并出现以下错误:
Error:(48, 56) polymorphic expression cannot be instantiated to expected type;
found : [B >: String]Array[B]
required: IndexedSeq[String]
def fromList(list: List[String]): Foo = new Foo(list.toArray)
^

为什么编译器不能推断 Array[String]这里?或者这个问题是否与来自 Array 的隐式转换有关?到 IndexedSeq的?

最佳答案

问题在于.toArray方法返回某种类型的数组 B这是 T 的父类(super class)在 List[T] .这允许您使用 list.toArrayList[Bar]哪里Array[Foo]如果 Bar 是必需的扩展 Foo .

是的,这不是开箱即用的真正原因是编译器试图找出哪个 B使用以及如何获得 IndexedSeq .似乎它正在尝试解决 IndexedSeq[String]要求但 B只能保证是 StringString 的父类(super class);因此错误。

这是我首选的解决方法:

def fromList(list: List[String]): Foo = new Foo(list.toArray[String])

关于arrays - Scala 类型推断 : can't infer IndexedSeq[T] from Array[T],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26677822/

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