我正在尝试使用另一个Int的大小数组创建一个Char数组。代码没有编译:
object Main {
def main(args: Array[String]): Unit = {
val mapping = Map(1 -> "ABC", 2 -> "DEF")
val a = mapping.keySet.toArray
val c = Array[Char](a.length)
}
}
编译器抛出错误:"类型不匹配;发现:需要Int:Char"
当我将上面的代码更改为:
val c = Array[Char](2) // no compiler error
看起来编译器将我的输入解释为不是大小参数,而是认为它是Char,例如Char数组的初始元素
因为在java中这段代码编译没有问题我想知道 什么是使用另一个数组长度作为大小参数在Scala中初始化不同数组的正确方法?
答案 0 :(得分:5)
您应该在最后一行使用.ofDim
val c = Array.ofDim[Char](a.length)
第二个工作
val c = Array[Char](2)
因为编译器将2本身视为一个字符。
答案 1 :(得分:3)
数组类型有一个令人困惑的方面,让我帮你澄清一下:
1.Array类型有一个类和一个对象,该对象被称为特定类的伴随对象。
2.object数组有一个应用方法,在您使用的代码中,but
它不能与伴侣类构造相同。
对于此代码段,解决方案是:
object Main {
def main(args: Array[String]): Unit = {
val mapping = Map(1 -> "ABC", 2 -> "DEF")
val a = mapping.keySet.toArray
val c = new Array[Char](a.length)
}
}
请注意更改它,将new
关键字添加到创建的Array类中。