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