Загрузка...

About generics, general characteristics

Thread in Rust created by K1p1k Dec 24, 2025. 229 views

  1. K1p1k
    В данной теме хочу рассказать про поверхностную информцию о дженерики в rust

    Дженерики - употребление разных типов данных с одинаковыми функциями(трейтами)

    Допусти мы хотим создать функцию которая будет брать вод с консоли(unsafe) и парсить в нужный нам формат

    Code
    pub fn input() -> String {
    let mut input = String::new();
    io::stdin().read_line(&mut input).unwrap();
    input
    }
    Давайте напишем функцию parse_input
    Это будет обертка input с String.parse

    Code
    pub fn parse_input() -> Result<F, F::Err>
    Ну так у нас нету аргументов во что парсить
    Code
    pub fn parse_input<F>() -> Result<F, F::Err>
    Code
    let res = input();
    res.trim().parse::<F>()
    Так что будет если мы запустим данный код?
    Ответ: он не заработает
    Мы не можем использовать дженерик F в функции parse, так как компилятор не знает будет ли F содержать нужные методы, которые используються в parse

    Иза этого мы должны указать какие трейты должен реализовать дженерик
    Code
    pub fn parse_input<F: FromStr>()
    изменяем голову функции и работает

    Функция parse берет в себя дженерик реализованый FromStr у всех типов стэк есть данная реализация
    Теперь наша функция отрабатывает
    Code
    mod utils;
    use utils::*;

    fn main() {
    let age = parse_input::<isize>();
    println!("You age: {:?}", age.unwrap());
    }
    !!В main .rs мы используем unwarp необходимо обрабатывать result получаймый от parse!!
    IDE c rust-analyzer всегда подскажет какой трейт надо указать
     
  2. kernz
    kernz Dec 26, 2025 Banned 1,717 Jun 29, 2021
    надо бы сначала аудиторию познакомить с самим языком, дать понятия терминам, на самом деле не совсем понятно с какой целью и на кого расчитывался данный пост, тут большинство питон не могут освоить и пишут нейрокал, а тут раст, для понимания которого нужно курс универа пройти (утрировано, но язык не для первопроходца, даже плюсы на первый взгляд покажутся легче), поэтому хотелось бы более адаптированный материал, возможно познакомить кого-то с языком, а не сразу про дженерики рассказывать.
     
    1. View previous comments (13)
    2. oiiaioiiao
      avatarkernz , с++ не может быть легче питона
    3. K1p1k Topic starter
      avataroiiaioiiao, на его гитхабе asyncpaymenta я не видел гитхаб tosa, вот и подумал
    4. kernz
      avataroiiaioiiao, никто не говорил, что плюсы проще питона
  3. GUSAR
    unwrap — важная вещь, ибо из-за нее упало пол интернета.
     
Loading...