Бесплатная библиотека
Читайте книгу на сайте или телефоне
Rust на примерах - Читать Любимую Русскую Полную Книгу 👉 Read-E-Book.com

Rust на примерах

Электронная книга - «Rust на примерах». Краткое содержание книги:

https://doc.rust-lang.ru/stable/rust-by-example/
1 ... 49 50 51 52 53 54 55 56 57 ... 92
Перейти на страницу:

let coerced_static = coerce_static(&lifetime_num);

println!("coerced_static: {}", coerced_static);

}

println!("NUM: {} остаётся доступным!", NUM);

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Смотрите также:

'static константы

Сокрытие

Некоторые шаблоны времён жизни достаточно общие и поэтому анализатор заимствований может позволить вам опустить их чтобы ускорить написание кода и увеличить его читаемость. Это известно как сокрытие времён жизни. Сокрытие появилось в Rust, исключительно из-за того, что они применяются к общим шаблонам.

Следующий код показывает несколько примеров сокрытия. Для более полного описания сокрытия, обратитесь к главе про [a0}сокрытие времён жизни в TRPL.

// По существу, `elided_input` и `annotated_input` имеют одинаковую сигнатуру

// потому что время жизни `elided_input` выводится компилятором:

fn elided_input(x: &i32) {

println!("`elided_input`: {}", x);

}

fn annotated_input<'a>(x: &'a i32) {

println!("`annotated_input`: {}", x);

}

// Аналогично, `elided_pass` и `annotated_pass` имеют идентичные сигнатуры

// потому что время жизни неявно добавлено к `elided_pass`:

fn elided_pass(x: &i32) -> &i32 { x }

fn annotated_pass<'a>(x: &'a i32) -> &'a i32 { x }

fn main() {

let x = 3;

elided_input(&x);

annotated_input(&x);

println!("`elided_pass`: {}", elided_pass(&x));

println!("`annotated_pass`: {}", annotated_pass(&x));

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Смотрите также:

сокрытие

Типажи (трейты)

Типаж (trait, трейт) - это набор методов, определённых для неизвестного типа: Self. Они могут получать доступ к другим методам, которые были объявлены в том же типаже.

Типажи могут быть реализованы для любых типов данных. В примере ниже, мы определили группу методов Animal. Типаж Animal реализован для типа данных Sheep, что позволяет использовать методы из Animal внутри Sheep.

struct Sheep { naked: bool, name: &'static str }

trait Animal {

// Сигнатура статического метода, `Self` ссылается на реализующий тип.

fn new(name: &'static str) -> Self;

// Сигнатура метода экземпляра; они возвращают строки.

fn name(&self) -> &'static str;

fn noise(&self) -> &'static str;

// Типаж может содержать определение метода по умолчанию

fn talk(&self) {

println!("{} говорит {}", self.name(), self.noise());

}

}

impl Sheep {

fn is_naked(&self) -> bool {

self.naked

}

fn shear(&mut self) {

if self.is_naked() {

// Методы типа могут использовать методы типажа, реализованного для этого типа.

println!("{} уже без волос...", self.name());

} else {

println!("{} подстригается!", self.name);

self.naked = true;

}

}

}

// Реализуем типаж `Animal` для `Sheep`.

impl Animal for Sheep {

// `Self` реализующий тип: `Sheep`.

fn new(name: &'static str) -> Sheep {

Sheep { name: name, naked: false }

}

fn name(&self) -> &'static str {

self.name

}

fn noise(&self) -> &'static str {

if self.is_naked() {

"baaaaah?"

} else {

"baaaaah!"

}

}

// Методы по умолчанию могут быть переопределены.

fn talk(&self) {

// Например, мы добавили немного спокойного миросозерцания...

println!("{} делает паузу... {}", self.name, self.noise());

1 ... 49 50 51 52 53 54 55 56 57 ... 92
Перейти на страницу:
0
Сюжет
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
0
Атмосфера
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
0
Главный герой
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
0
Общее впечатление
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Итоговая оценка: 0.0 из 10 (голосов: 0 / История оценок)