нужны traits? Ведь можно тупо написать ради них impl и всё, зачем нужен этот чертов trait?)
А как ты обобщенную функцию для, допустим, сравнения напишешь?
Ох, также думал когда начинал учить раст
ну через impl для обобщенных типов, через реализацию Order как то там
Так трейт это определение типа
Трейт это свойство, которое можно реализовывать на различные типы. Ты можешь указать баунд у генерика, чтобы принимать только те типы, которые имеют это свойство. Благодаря этому, можно указать T: PartialEq и использовать cmp для сравнения - написать сортировку можно. Вот за этим трейты нужны Импл просто делает реализацию под конкретный тип/типы
Инкапсуляции трейты сами по себе не дают, наследования в расте нет. Полиморфизм - да, но он не такой как в ООП джаве
а то тот, который указан на сайте в книге, вообще не зашло, вернее не понял, ибо я до этого чисто на питоне и тут на тебе
Нет кончено, но дают, но это один из механизмов который позволяет что-то похожее реализовать.
в питоне же есть протоколы
trait Length { fn len(&self) -> usize } fn is_empty<T: Length>(t: &T) -> bool{ return t.len() > 0; } Ну вот такой, надуманный пример
это же не скомпилиться без баунда на T и ты либо return убери, либо ; добавь
а, ты добавил баунд, пока я писала
Да неудобно код с телефона писать)
Извините, баунд- это что?)
в примере выше T: Length объявляет дженерик T и вешает на него баунд Length это значит, что тип T должен реализовывать трейт Length если его не указать, компилятор будет ругаться из-за того, что у T нет метода len
такие вещи уже понимаю, спасибо)
Обсуждают сегодня