Ноль для карт, как для списков - PullRequest
3 голосов
/ 16 мая 2019

Можно ли создать Nil для карт?

Я имею в виду нечто подобное:

List() match {
    case Nil => true
}

но с картой:

Map() match {
    case NilMap => true
}

Я пытался реализовать это, но я застрял:

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

}

но id не компилируется ...

1 Ответ

8 голосов
/ 16 мая 2019

В любом случае, это похоже на работу.
Это называется логическим экстрактором .

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...