let _triangle = Triangle { length: 3.0, height: 4.0 };

print_debug(&rectangle);

println!("Area: {}", area(&rectangle));

//print_debug(&_triangle);

//println!("Area: {}", area(&_triangle));

// ^ TODO: Попробуйте раскомментировать эти строки.

// | Ошибка: Не реализован `Debug` или `HasArea`.

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Утверждения where также могут использоваться для применения ограничений в некоторых случаях, чтобы добавить выразительности.

<p id="Смотрите_также_35"><strong><a l:href="#Смотрите_также_35">Смотрите также:</a></strong></p>

std::fmt, struct и trait

<p id="Пример_пустые_ограничения"><strong><a l:href="#Пример_пустые_ограничения">Пример: пустые ограничения</a></strong></p>

Следствием того, как работают ограничения по трейту, является то, что даже если трейт не включает в себя какие-либо функциональные возможности, вы все равно можете использовать его в качестве ограничения. Примерами таких трейтов являются Eq и Ord из стандартной библиотеки.

struct Cardinal;

struct BlueJay;

struct Turkey;

trait Red {}

trait Blue {}

impl Red for Cardinal {}

impl Blue for BlueJay {}

// Эти функции действительны только для типов реализующих эти типажи.

// То, что типажи пусты, не имеет значения.

fn red(_: &T) -> &'static str { "красная" }

fn blue(_: &T) -> &'static str { "синяя" }

fn main() {

let cardinal = Cardinal;

let blue_jay = BlueJay;

let _turkey = Turkey;

// `red()` не будет работать для blue_jay, ни наоборот,

// из-за ограничений по трейту.

println!("Кардинал {} птица", red(&cardinal));

println!("Голубая сойка {} птица", blue(&blue_jay));

//println!("Индюк {} птица", red(&_turkey));

// ^ TODO: Попробуйте раскомментировать эту строку.

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="Смотрите_также_36"><strong><a l:href="#Смотрите_также_36">Смотрите также:</a></strong></p>

std::cmp::Eq, std::marker::Copy и трейты

<p id="Множественные_ограничения"><strong><a l:href="#Множественные_ограничения">Множественные ограничения</a></strong></p>

Множественные ограничения по типажу могут быть применены с помощью +. Разные типы разделяются с помощью ,.

use std::fmt::{Debug, Display};

fn compare_prints(t: &T) {

println!("Debug: `{:?}`", t);

println!("Display: `{}`", t);

}

Перейти на страницу:

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