Rust by Example | страница 23
>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
No type annotation of variables was needed, the compiler is happy and so is the programmer!
The type statement can be used to give a new name to an existing type. Types must have UpperCamelCase names, or the compiler will raise a warning. The exception to this rule are the primitive types: usize, f32, etc.
>// `NanoSecond` is a new name for `u64`.
>type NanoSecond = u64;
>type Inch = u64;
>// Use an attribute to silence warning.
>#[allow(non_camel_case_types)]
>type u64_t = u64;
>// TODO ^ Try removing the attribute
>fn main() {
>// `NanoSecond` = `Inch` = `u64_t` = `u64`.
>let nanoseconds: NanoSecond = 5 as u64_t;
>let inches: Inch = 2 as u64_t;
>// Note that type aliases *don't* provide any extra type safety, because
>// aliases are *not* new types
>println!("{} nanoseconds + {} inches = {} unit?",
>nanoseconds,
>inches,
>nanoseconds + inches);
>}
>הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The main use of aliases is to reduce boilerplate; for example the IoResult
Primitive types can be converted to each other through casting.
Rust addresses conversion between custom types (i.e., struct and enum) by the use of traits. The generic conversions will use the From and Into traits. However there are more specific ones for the more common cases, in particular when converting to and from Strings.