Rust by Example | страница 18



>let _unused_variable = 3u32;

>let noisy_unused_variable = 2u32;

>// FIXME ^ Prefix with an underscore to suppress the warning

>}

>הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Variable bindings are immutable by default, but this can be overridden using the mut modifier.

>fn main() {

>let _immutable_binding = 1;

>let mut mutable_binding = 1;

>println!("Before mutation: {}", mutable_binding);

>// Ok

>mutable_binding += 1;

>println!("After mutation: {}", mutable_binding);

>// Error!

>_immutable_binding += 1;

>// FIXME ^ Comment out this line

>}

>הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

The compiler will throw a detailed diagnostic about mutability errors.

Variable bindings have a scope, and are constrained to live in a block. A block is a collection of statements enclosed by braces {}.

>fn main() {

>// This binding lives in the main function

>let long_lived_binding = 1;

>// This is a block, and has a smaller scope than the main function

>{

>// This binding only exists in this block

>let short_lived_binding = 2;

>println!("inner short: {}", short_lived_binding);

>}

>// End of the block

>// Error! `short_lived_binding` doesn't exist in this scope

>println!("outer short: {}", short_lived_binding);

>// FIXME ^ Comment out this line

>println!("outer long: {}", long_lived_binding);

>}

>הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה