我想创建一个函数来检查isDebugEnabled()
类型的变量是否可以迭代。
Any
然后我可以像:
一样使用它def checkIterable(v: Any): Boolean = {
// match with something?
}
对于if (checkIterable(something)) {
for (s <- something) {
// do something with each element s of something
}
}
,Array
,List
和Seq
类型的变量,这应该返回true,基本上是定义Iterable
函数的任何类型的变量(don&看起来我应该测试该功能的存在,除非它是唯一可行的方式......)
答案 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)