Документация говорит, что Set.head
возвращает "первый" элемент, а .tail
возвращает "все, кроме первого". * Поскольку a Set
doesn На самом деле у него есть "первый" элемент, документация предупреждает, что без упорядоченного типа вы можете получить другой результат на разных прогонах. Но гарантированы ли вы, что хвост не будет включать голову?
Причина, по которой я спрашиваю, - мне интересно, нормально ли это записать Set
следующим образом:
def recurse(itemsToExamine: Set[Item], acc: Result): Result =
if (itemsToExamine.isEmpty) acc
else {
val item = itemsToExamine.head
recurse(
item.spawnMoreItems ++ itemsToExamine.tail,
acc.updatedFor(item))
}
Если это законно, это, безусловно, будет лучше, чем преобразование с Set
в Seq
и обратно, чтобы разделить голову и хвост на каждой рекурсии.
* Фактически, он говорит "выбирает первый элемент" и "выбирает все, кроме первого элемента". Я предполагаю, что "выбор" - это просто плохой выбор слова. Если есть причина говорить "выбирает", а не "возвращает", пожалуйста, дайте мне знать.