12 строке?
https://github.com/teloxide/teloxide/blob/master/examples/sqlite_remember.rs#L12
Тип SqliteStorage<Json> реализует трейт Storage<State>, у трейта Storage есть ассоциированный тип Error, эта конструкция позволяет получить этот тип. <Type as Trait>::item Позволяет получить реализацию item из трейта Trait из реализации для Type.
Мама мия. Как всё сложно. Спасибо
такое удобно подсматривать в https://doc.rust-lang.org/book/appendix-02-operators.html
есть ещё замечательный https://cheats.rs/
Ну вот допустим, у твоего типа есть inherent метод foo, также твой тип имплементирует трейт Trait, у которого тоже есть одноименный метод foo. Inherent - методы имеют приоритет над трейт-методами. Такой синтаксис <type as Trait> позволяет обойти этот приоритет
Оо. Крутой справочник
Ну во это самое "откуда" не парсится в голове. Это какая-то привязка к трейту через генерик? Впрочем, думаю само дойдет с опытом. Пока слишком сложно для понимания )
Ну смотри. struct T; trait One { type Error; } trait Two { type Error; } impl One for T { type Error = u8; } impl Two for T { type Error = String; } В таком примере T::Error — двусмысленная запись. Не понятно T::Error должно раскрываться в u8 или String. <_ as Trait>:: позволяет убрать двухсмысленность, показывая в какую конкретную реализацию надо смотреть. <T as One>::Error это u8, <T as Two>::Error это String
Обсуждают сегодня