Введение в трейты функций в Rust
Трейт функции описывает, как можно вызывать замыкание: только читать захват, менять его или забрать значение один раз. Компилятор подбирает трейт по тому, что замыкание делает с именами снаружи тела.
Если замыкание лишь читает захваченное или копирует его, его можно передавать в функцию и звать снова: каждый проход не отнимает данные у захвата. Так удобно считать суммы, фильтровать списки и применять одно правило к разным числам подряд.
Когда замыкание меняет захваченную переменную, параметр функции тоже должен допускать изменение. Если замыкание отдает строку или другое значение наружу, повторное обращение уже невозможно: захват ушел вместе с первым результатом.
Дальше разберем много вызовов без смены захвата, изменение захвата, один вызов с отдачей значения, запись параметра с ограничением и то, как захват во владение влияет на выбор трейта. Этот захват сразу понадобится в потоках, когда замыкание отдают отдельной линии. В конце закрепим передачу замыкания в функцию на задачах.