Иногда я разбиваю свой код на функции (или методы) только для того, чтобы обнаружить, что компилятор жалуется на это.

ЗАЧЕМ?

Часто это происходит из-за того, что я пытаюсь вернуть Iterator или другой Trait.

Я все еще учусь, но пока у меня есть следующие моменты о функциях Rust:

  • Вы не можете возвращать черты из функций. Будьте конкретны, верните что-то, что реализует нужный вам трейт. Например, возвращаемый тип SplitWhitespace из функции split_whitespace. Очень конкретно, да? Но он реализует Итератор. Функция split возвращает тип Split другой структуры, которая также реализует Итератор. Полезная ссылка: реализовать итератор.
  • Вы можете принимать черты в качестве аргументов, использовать и злоупотреблять этим!

Эмпирическое правило, используйте закон Постеля: Будьте консервативны в том, что отправляете, будьте либеральны в том, что принимаете.