对于地图,则为零;对于列表,则为零

Stu*_*man 3 maps scala

是否可以Nil为地图创建?

我的意思是类似的东西:

List() match {
    case Nil => true
}
Run Code Online (Sandbox Code Playgroud)

但有地图:

Map() match {
    case NilMap => true
}
Run Code Online (Sandbox Code Playgroud)

我尝试实现它,但遇到了麻烦:

object NilMap extends Map[Nothing, Nothin] {
    def unapply[K,V](map: Map[K,V]): Option[Map[K,V]] = 
       if(map.isEmpty) Some(map) else None

}
Run Code Online (Sandbox Code Playgroud)

但id无法编译...

Lui*_*rez 8

无论如何,这似乎可行。
这称为布尔提取器

object NilMap {
  def unapply(map: Map[_, _]): Boolean =
    map.isEmpty
}

Map.empty[String, Int] match { case NilMap() => true; case _ => false } // true
Map("a" -> 10) match { case NilMap() => true; case _ => false } // false
Run Code Online (Sandbox Code Playgroud)