Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何匹配Scala中的数组类型?_Scala - Fatal编程技术网

如何匹配Scala中的数组类型?

如何匹配Scala中的数组类型?,scala,Scala,给定一个函数,该函数接收一个参数arr:Array[Any],如何匹配模式中Any的类型?更重要的是,如何同时匹配多个案例 目前我有 def matchType (arr: Array[Any]) = { arr match { case a @ ( _: Array[Int] | _: Array[Long] | _: Array[Double] ) => arr.map(*...*); case b: Array[Byte] => pri

给定一个函数,该函数接收一个参数
arr:Array[Any]
,如何匹配模式中
Any
的类型?更重要的是,如何同时匹配多个案例

目前我有

def matchType (arr: Array[Any]) = {

    arr match {
        case a @ ( _: Array[Int] | _: Array[Long] | _: Array[Double] ) => arr.map(*...*);
        case b: Array[Byte] => print("byte")
        case _ => print("unknown")
    }        

}
无法使用

cmd8.sc:4:scrutinee与模式类型不兼容;
找到:数组[Int]
必需:数组[任何]

注意:Int不能匹配整个
数组,但可以依次匹配每个元素:

def matchType (arr: Array[_]) =
  arr.foreach{
    case _: Double | _: Float => println("floating")
    case i: Int => println("int")
    case b: Byte => println("byte")
    case _ => println("other")
  }

由于
Array[Any]
可能具有多种基础类型的混合体,因此如果不依次检查每个元素,就无法将其转换为另一种类型的
Array

数组在元素类型中是不变的。如果你有一个
数组[Any]
,那么你就有一个
数组[Any]
,就是这样。它不可能是
Array[Int]
Array[Byte]
或其他任何东西,除非您错误地将其强制转换为
Array[Any]
。甚至元素的大小(64位对32位对8位)也不同。你到底想做什么?谢谢你的澄清。我正在尝试实现一个函数,该函数可以接收任意类型的
数组
,并对某些类型执行一系列操作(例如
map()
),对其他类型执行不同的操作。我希望这是有意义的。您可以使用
数组[Any]
,然后处理
映射中不同类型的
案例。但那太难看了。如果您首先解释一下您是如何丢失数组类型的,那就更好了。提供如何使用函数的详细说明将使问题更加清楚。这将使正确的参数类型
Array[\u]
,而不是
Array[Any]
。很好。谢谢你的澄清。它消除了我对数组匹配性的困惑。我会接受这个答案,认为这是最接近我最初想法的解决方案。