- Что такое здесь, оно даже нигде не определено.
Это точно определено прямо здесь.
case List(a) => true
означает: соответствует Перечислите только одного элемента и назовите этот элемент a
. Так как он нигде не используется, вы можете просто сделать case List(_) => true
.
Однако, ИМХО, было бы более идиоматическим c (и, возможно, даже более производительным) для выполнения case _ :: Nil => true
Как сопоставление регистра работает с экземпляром объекта List. Почему он может сопоставить список с одним элементом
Это в основном вызов метод unapply
в объекте-компаньоне List
. Это называется объекты экстрактора .
(я полагаю, что связанная статья дает отличное объяснение того, как это работает, поэтому я не буду go дальше)