如何匹配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]
。很好。谢谢你的澄清。它消除了我对数组匹配性的困惑。我会接受这个答案,认为这是最接近我最初想法的解决方案。