数组 – Scala类型推断:不能从Array [T]推断出IndexedSeq [T]

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

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的数组,它是List [T]中T的超类.这允许您在List [Bar]上使用list.toArray,如果Bar扩展Foo,则需要Array [Foo].

是的,这个开箱即用的真正原因是编译器试图找出使用哪个B以及如何到达IndexedSeq.它似乎正在尝试解决IndexedSeq [String]要求,但B只能保证是String或String的超类;因此错误.

这是我的首选工作:

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

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...