Преобразование в строку и обратно

RustRustBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном задании мы узнаем, как преобразовывать типы в строки и обратно в Rust. Чтобы преобразовать любой тип в строку, мы можем реализовать трейт ToString для этого типа. Альтернативно, мы можем реализовать трейт fmt::Display, который автоматически предоставляет трейт ToString и позволяет нам выводить тип с использованием println!. С другой стороны, чтобы преобразовать строку в определенный тип, например, число, мы можем использовать функцию parse с использованием типа-инференса или, указав тип с использованием синтаксиса "turbofish". Это основано на трейте FromStr, который реализован для многих типов в стандартной библиотеке. Если мы хотим преобразовать строку в пользовательский тип, мы можем реализовать трейт FromStr для этого типа.

Примечание: Если в лабораторном задании не указано имя файла, вы можете использовать любое имя файла, которое хотите. Например, вы можете использовать main.rs, скомпилировать и запустить его с использованием rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/traits("Traits") subgraph Lab Skills rust/variable_declarations -.-> lab-99301{{"Преобразование в строку и обратно"}} rust/integer_types -.-> lab-99301{{"Преобразование в строку и обратно"}} rust/string_type -.-> lab-99301{{"Преобразование в строку и обратно"}} rust/function_syntax -.-> lab-99301{{"Преобразование в строку и обратно"}} rust/expressions_statements -.-> lab-99301{{"Преобразование в строку и обратно"}} rust/method_syntax -.-> lab-99301{{"Преобразование в строку и обратно"}} rust/traits -.-> lab-99301{{"Преобразование в строку и обратно"}} end

Преобразование в строку и обратно

Преобразование в строку

Преобразование любого типа в String настолько просто, насколько и реализация трейта [ToString] для этого типа. Вместо прямого выполнения этого вы должны реализовать трейт fmt::Display, который автоматически предоставляет [ToString] и также позволяет выводить тип, как обсуждалось в разделе о print!.

use std::fmt;

struct Circle {
    radius: i32
}

impl fmt::Display for Circle {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "Circle of radius {}", self.radius)
    }
}

fn main() {
    let circle = Circle { radius: 6 };
    println!("{}", circle.to_string());
}

Парсинг строки

Одним из более распространенных типов является преобразование строки в число. Идиоматический подход к этому - использовать функцию [parse] и либо обеспечить тип-инференс, либо указать тип для парсинга с использованием синтаксиса "turbofish". Оба варианта показаны в следующем примере.

Это преобразует строку в указанный тип, при условии, что для этого типа реализован трейт [FromStr]. Это реализовано для многочисленных типов в стандартной библиотеке. Чтобы получить эту функциональность для пользовательского типа, просто реализуйте для него трейт [FromStr].

fn main() {
    let parsed: i32 = "5".parse().unwrap();
    let turbo_parsed = "10".parse::<i32>().unwrap();

    let sum = parsed + turbo_parsed;
    println!("Sum: {:?}", sum);
}

Резюме

Поздравляем! Вы завершили лабораторную работу по преобразованию в строки и обратно. Вы можете практиковаться в других лабораторных работах в LabEx, чтобы улучшить свои навыки.