Есть ли какой-либо специальный класс case для представления пустого ArrayBuffer
, который может использоваться при сопоставлении с образцом, аналогичный Nil
для списков?Pattern match empty ArrayBuffer
Кроме того, почему это работает:
scala> collection.mutable.ArrayBuffer.empty == Nil
res11: Boolean = true
Хотя это не делает:
scala> collection.mutable.ArrayBuffer() match { case Nil => 1 }
<console>:8: error: pattern type is incompatible with expected type;
found : scala.collection.immutable.Nil.type
required: scala.collection.mutable.ArrayBuffer[Nothing]
UPDATE
После придав ему некоторые мысли я полагаю, что нет такого случая класса. Хотя существование Nil
жизненно важно для работы List
, никакой специальной структуры такого рода не требуется для массивов.
Я нашел обходной путь для пустой проверки соответствия, которые могут работать в большинстве случаев:
collection.mutable.ArrayBuffer(2) match {
case collection.mutable.ArrayBuffer(v, _*) => v * 2
case _ => 0
}
Я сначала проверить, если массив имеет по меньшей мере один элемент, а в противном случае он должен быть пустым. Также, как оказалось, я мог бы просто использовать ArrayBuffer.isEmpty
вместо соответствия шаблону.
'ArrayBuffer.isEmpty' кажется более правильным для не-ADT! ... или просто 'toList' ваш ArrayBuffer, если это не слишком дорого, и работать над этим. –