Одно из преимуществ несоблюдения коллекций по индексам - избегать ошибок. Это, конечно, не единственное преимущество, но это один из них.
Теперь я часто использую sliding
в некоторых алгоритмах в Scala, но я чувствую, что это обычно приводит к чему-то очень похожим на ошибки "за собой", поскольку sliding
m
элементов в наборе размера n
имеет размер n - m + 1
элемент. Или, что более тривиально, list sliding 2
- это один элемент, меньший, чем list
.
Чувство, которое я получаю, состоит в том, что в этом шаблоне отсутствует абстракция, что-то, что будет частью sliding
, часть чего-то большего - например foldLeft
- to reduceLeft
. Однако я не могу придумать, что это может быть. Может ли кто-нибудь помочь мне найти просветление здесь?
ОБНОВИТЬ
Поскольку люди не ясно, что я говорю, рассмотрим этот случай. Я хочу использовать строку. В принципе, каждая буква, которой не предшествует буква, должна быть в верхнем регистре, а все остальные буквы должны быть строчными. Используя sliding
, я должен использовать специальный случай либо первую, либо последнюю букву. Например:
def capitalize(s: String) = s(0).toUpper +: s.toSeq.sliding(2).map {
case Seq(c1, c2) if c2.isLetter => if (c1.isLetter) c2.toLower else c2.toUpper
case Seq(_, x) => x
}.mkString