В этой серии я буду публиковать короткие сообщения о том, как определенные проблемы могут быть решены в Scala, обычно с использованием методов FP и библиотек из экосистемы Typelevel/cats.
Если вам нужно познакомиться с Cats, я предлагаю вам пройти по этим ссылкам:
https://typelevel.org/cats/typeclasses.html
https://www.youtube.com/watch?v=HMs_F7LXTak (да, это моя бессовестная самореклама)
https://slideslive.com/38908126/oh-all-the-things-youll-traverse
https://typelevel.org/cats/resources_for_learners.html
Ладно, вернемся к посту. Сегодня мы сосредоточимся на простой задаче:
Я хочу сопоставить список/вектор/поток, зная индекс текущего обрабатываемого элемента.
Не спрашивайте больше! Мы будем использовать Traverse
.
(если вы все еще не понимаете, что такое Traverse
, прокрутите вверх и обязательно посмотрите выступление Луки!)
Сигнатура метода выглядит довольно простой в использовании. Тогда воспользуемся!
Здесь у нас есть функция, которая принимает F
из A
s (например, List
из Int
s) и изменяет элементы с четными индексами, используя функцию, переданную как modify
.
Вот как вы будете его использовать, а также результаты.
Примечание. Убедитесь, что у вас включен -Ypartial-unification
.
И это все! В Traverse
есть еще много полезных функций, и в будущем мы, возможно, рассмотрим их больше.
Дайте мне знать, если у вас есть другой вариант использования этого блестящего класса шрифтов или у вас есть какие-либо вопросы о кошках (даже если я не смогу ответить, я направлю вас к нужным людям!)