Scala泛型数组实例化

时间:2014-10-23 16:48:30

标签: arrays scala generics type-mismatch

我有一个函数可以生成特定类型的数组:

def mkArray[A:ClassTag:Ordering](size:Int):Array[A] = Array.ofDim[A](size)

我想创建类型为Int或String的数组arr,具体取决于String str,如下所示:

var arr = if(str=="i"){mkArray[Int](size)}else{mkArray[String](size)}

现在我尝试像这样向数组添加值:

arr(n) = num.toInt // num is String like "123"

但它说:

- type mismatch; found : Int required: _366 where type _366 >: Int 
 with String

如何解决这个问题,根据字符串str生成类型为Array [Int]或Array [String]的arr?

感谢任何帮助, 谢谢!

1 个答案:

答案 0 :(得分:0)

Scala是一种静态类型语言,在您的情况下,arr的类型为Array[_ >: Int with String]。因此,如果给它一个Int,就会出现类型错误。

根据您在代码中进一步使用数组的方式,我建议您查看Either [1],因为它可能有助于保持数组[Either]和处理当它包含Int vs String时,它使用不同的模式匹配。

[1] http://danielwestheide.com/blog/2013/01/02/the-neophytes-guide-to-scala-part-7-the-either-type.html