Читаем Rust на примерах полностью

use std::convert::From;

#[derive(Debug)]

struct Number {

value: i32,

}

impl From for Number {

fn from(item: i32) -> Self {

Number { value: item }

}

}

fn main() {

let int = 5;

// Попробуйте убрать аннотацию типа

let num: Number = int.into();

println!("Мой номер {:?}", num);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="tryfrom_и_tryinto"><strong><a l:href="#tryfrom_и_tryinto">TryFrom</a><a l:href="#tryfrom_и_tryinto"></a><a l:href="#tryfrom_и_tryinto">и</a><a l:href="#tryfrom_и_tryinto">TryInto</a></strong></p>

Как и From и Into, TryFrom и TryInto - обобщённые типажи для конвертации между типами. Но в отличии от From/Into, типажи TryFrom/TryInto используются для преобразований с ошибками и возвращают Result.

use std::convert::TryFrom;

use std::convert::TryInto;

#[derive(Debug, PartialEq)]

struct EvenNumber(i32);

impl TryFrom for EvenNumber {

type Error = ();

fn try_from(value: i32) -> Result {

if value % 2 == 0 {

Ok(EvenNumber(value))

} else {

Err(())

}

}

}

fn main() {

// TryFrom

assert_eq!(EvenNumber::try_from(8), Ok(EvenNumber(8)));

assert_eq!(EvenNumber::try_from(5), Err(()));

// TryInto

let result: Result = 8i32.try_into();

assert_eq!(result, Ok(EvenNumber(8)));

let result: Result = 5i32.try_into();

assert_eq!(result, Err(()));

}

<p id="fromstr_и_tostring"><strong><a l:href="#fromstr_и_tostring">FromStr</a><a l:href="#fromstr_и_tostring"></a><a l:href="#fromstr_и_tostring">и</a><a l:href="#fromstr_и_tostring">ToString</a></strong></p><p id="Конвертация_в_строку"><strong><a l:href="#Конвертация_в_строку">Конвертация в строку</a></strong></p>

Преобразовать любой тип в 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, "Круг радиусом {}", self.radius)

}

}

fn main() {

let circle = Circle { radius: 6 };

println!("{}", circle.to_string());

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="Парсинг_строки"><strong><a l:href="#Парсинг_строки">Парсинг строки</a></strong></p>
Перейти на страницу:

Похожие книги

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители

Все жанры