Читаем Rust by Example полностью

// Here, `` precedes the first use of `T`, so `SingleGen` is a generic type.

// Because the type parameter `T` is generic, it could be anything, including

// the concrete type `A` defined at the top.

struct SingleGen(T);

fn main() {

// `Single` is concrete and explicitly takes `A`.

let _s = Single(A);

// Create a variable `_char` of type `SingleGen`

// and give it the value `SingleGen('a')`.

// Here, `SingleGen` has a type parameter explicitly specified.

let _char: SingleGen = SingleGen('a');

// `SingleGen` can also have a type parameter implicitly specified:

let _t = SingleGen(A); // Uses `A` defined at the top.

let _i32 = SingleGen(6); // Uses `i32`.

let _char = SingleGen('a'); // Uses `char`.

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="see_also_32"><strong><a l:href="#see_also_32">See also:</a></strong></p>

structs

<p id="functions_1"><strong><a l:href="#functions_1">Functions</a></strong></p>

The same set of rules can be applied to functions: a type T becomes generic when preceded by .

Using generic functions sometimes requires explicitly specifying type parameters. This may be the case if the function is called where the return type is generic, or if the compiler doesn't have enough information to infer the necessary type parameters.

A function call with explicitly specified type parameters looks like: fun::().

struct A; // Concrete type `A`.

struct S(A); // Concrete type `S`.

struct SGen(T); // Generic type `SGen`.

// The following functions all take ownership of the variable passed into

// them and immediately go out of scope, freeing the variable.

// Define a function `reg_fn` that takes an argument `_s` of type `S`.

// This has no `` so this is not a generic function.

fn reg_fn(_s: S) {}

// Define a function `gen_spec_t` that takes an argument `_s` of type `SGen`.

// It has been explicitly given the type parameter `A`, but because `A` has not

// been specified as a generic type parameter for `gen_spec_t`, it is not generic.

fn gen_spec_t(_s: SGen) {}

// Define a function `gen_spec_i32` that takes an argument `_s` of type `SGen`.

// It has been explicitly given the type parameter `i32`, which is a specific type.

// Because `i32` is not a generic type, this function is also not generic.

fn gen_spec_i32(_s: SGen) {}

// Define a function `generic` that takes an argument `_s` of type `SGen`.

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

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

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

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

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

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