pub grade: f32,
pub student_name: String,
pub student_age: u8,
}
Нужно чтобы поле grade принимало f32 | String. Сделал через новый тип enum Grade.
А как можно сделать через генерики и баунды? Просто задание в разделе generics, а он там как бы и не нужен..
Трейт новый напили и реализуй его для обоих вариантов, не?
А, ну да, спасибо. После typescript тяжко идет
Плохое задание
Это тоже на вид так себе. Ошибка в ошибке в ошибке. Или это норма? https://github.com/rust-lang/rustlings/blob/main/exercises/error_handling/errors6.rs
норма - часто же нужно ошибки из внешних либ в свой дополнительный контекст заворачивать
Это норма, такое и в стд пишут
Раз уж скинул ссылку, спрошу. Я случайно передал енум вместо лямбды, а оно заработало ..parse.map_err(ParsePosNonzeroError::ParseInt). Как называется эта фича?
если я правильно понял задание, то можно - от типа же требуется только быть напечатанным и все? надо обобщить по такому типажу, который это позволят и готово
В подсказках к заданию еще про bounds написано..
находишь типаж, который и f32, и String реализуют, и используешь его как баунд для обобщения поля структуры
Никак не называется. Варианты энума это простые функции.
Если они тупл-варианты Аналогично тупл-структуры
https://doc.rust-lang.org/stable/book/ch19-05-advanced-functions-and-closures.html#function-pointers да, специального названия у этого нет
Звучит так, словно typescript-овый number | string делают это лучше :)
я не особо по тайпскрипту, но это разве не просто аналог enum'а будет?
Но они ведь содержат внутри значения.. Ладно, разберусь по ходу
Это конструктор варианта, а не сам вариант
это _значения_ вариантов могут содержать внутри чего-то. а сам инициализатор варианта - просто функция, которая может что-то есть на вход и возвращать соответвующий враиант перечисления
Задание плохое, не делай на его основе выводов
Получается это сахар для impl ParsePosNonzeroError {} со статмческими методами (без self) внутри?
главное отличие обобщений от перечислений в плане организации кода - перечисления жестко определяют перечень типов и все, никто снаружи новый варинт не может добавить. а в случае обобщения по типажу кто угодно может взять и для чего ему там нужно реализовать типаж. т.е. если ты в задаче сверху обобщишь по (спойлер) std::fmt::Display, то потом ты в это поле вообще кучу других типов можешь складывать. и свои собственные структуры тоже, если impl Display для них напишешь
https://github.com/rust-lang/rfcs/pull/402 были всякие рфц с сахором под анонимные перечисления с таким синтаксисом, кстати, но ничего из них пока не приняли, насколько я в курсе
Так? pub struct ReportCard<T: Display> { pub grade: T, pub student_name: String, pub student_age: u8, }
И то и то правильный вариант. Для a|b как раз лучше энум
Это как энум с неявным into. И вариантов указывать литералы
Обсуждают сегодня