列表上的模式匹配以检查是否为空

时间:2018-06-21 07:24:46

标签: scala

我想使用模式匹配来检查列表是否为空

val simplelist: List[Char] = List('a', 'b', 'c', 'd')

def test(l:List[Char]):Unit= l.map(d => print(d))
simplelist match {
   case x :: xs =>
     test(xs)
   case Nil=>  log.info("empty")
}

输出是bcd而不是abcd

2 个答案:

答案 0 :(得分:1)

  1. 对于空列表模式匹配,您可以这样做。

#include "boost/date_time/posix_time/posix_time.hpp" boost::posix_time::ptime now(boost::posix_time::microsec_clock::universal_time()); boost::posix_time::ptime before(time_from_string("20040101T000000Z")); long long diff = (now - before).total_microseconds();

val simplelist: List[Char] = List('a', 'b', 'c', 'd')

2)对于这个问题,输出是bcd而不是abcd

如果def test(l:List[Char]):Unit= l.map(d => print(d)) simplelist match { case x :: xs => test(xs) case List() => println("empty List") // this will pattern match as empty List case Nil=> log.info("empty") } 与 x ='a'并且 xs = List('b','c','d')

并且您仅将xs传递给测试方法。因此,它仅按预期方式打印b,c,d。

答案 1 :(得分:0)

您可以尝试以下简单操作:

scala> List(1,2).isEmpty
res0: Boolean = false

您不需要为此进行模式匹配。