我想检查Scala中的obj是否是Array类型,而不是关心内部是什么类型的值.有一些简单的方法来做到这一点?
var x = Array(1,2,3)
x.isInstanceOf[Array[Any]] // which is false
Run Code Online (Sandbox Code Playgroud)
我希望它是真的.
更新:
我有一个功能:
def someFunction(obj: Any) {
if (obj.isInstanceOf[Int]) {
// do something
}
if (obj.isInstanceOf[String]) {
// do something
}
if (obj.isInstanceOf[Array[Any]) {
// for each of the obj inside the Array do something
}
}
Run Code Online (Sandbox Code Playgroud)
数组Array(1,2,3)是类型Int,因此Array[Any]只有在Array收集的情况下才会奇怪地返回false .
如果你不关心它的类型Array,你可以比较Array[_](任何类型的数组)
scala> var x = Array(1,2,3)
x: Array[Int] = Array(1, 2, 3)
scala> x.isInstanceOf[Array[Int]]
res0: Boolean = true
scala> x.isInstanceOf[Array[_ <: Any]]
res7: Boolean = true
scala> x.isInstanceOf[Array[_ <: AnyVal]]
res12: Boolean = true
scala> x.isInstanceOf[Array[_]]
res13: Boolean = true
Run Code Online (Sandbox Code Playgroud)
scala.Int扩展AnyVal哪个扩展Any你可以明确提到_ extends AnyVal.
但是其他scala集合就像List[T]是List[Any]
scala> List(1, 2).isInstanceOf[List[Any]]
res30: Boolean = true
scala> Seq(1, 2).isInstanceOf[Seq[Any]]
res33: Boolean = true
Run Code Online (Sandbox Code Playgroud)
此外,List[T]是实例Seq[Any],因为List扩展Seq和T扩展Any
scala> List(1, 2).isInstanceOf[Seq[Any]]
res35: Boolean = true
Run Code Online (Sandbox Code Playgroud)
AND,对if else你可以用模式匹配方式解决,
array match {
case x: Int => println("int")
case x: String => "string"
case Array[Int] => println("ints")
case Array[String] => println("strings")
case _ => println("whatever")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2737 次 |
| 最近记录: |