Scala:测试是否可以迭代任何变量

时间:2016-06-15 00:31:16

标签: scala

我想创建一个函数来检查isDebugEnabled()类型的变量是否可以迭代。

Any

然后我可以像:

一样使用它
def checkIterable(v: Any): Boolean = {
    // match with something?
}

对于if (checkIterable(something)) { for (s <- something) { // do something with each element s of something } } ArrayListSeq类型的变量,这应该返回true,基本上是定义Iterable函数的任何类型的变量(don&看起来我应该测试该功能的存在,除非它是唯一可行的方式......)

1 个答案:

答案 0 :(得分:1)

为什么不使用模式匹配?

something match {
  case xs: Iterable[_] => // do something with xs as iterable ...
  case _ => // ... that's something other
}

修改

既然你想迭代到结果但不知道里面是什么,我能想象的唯一方法就是这样:

def toList(x: Any): List[Any] = x match {
  case xs: Iterable[_] => xs.toList
  case xs: Array[_] => xs.toList
  case _ => List.empty
}

这样一来,无论你的输入是什么,你都会得到一个List并且可以迭代它。如果它不可迭代,那么它将是一个空列表。

toList("foo")        // List[Any] = List()
toList(List(1, 2, 3) // List[Any] = List(1, 2, 3)