美文网首页
1# 变量、可变性变量、常量、隐藏(Shadowing)

1# 变量、可变性变量、常量、隐藏(Shadowing)

作者: IamaStupid | 来源:发表于2022-02-21 15:10 被阅读0次

    变量

    变量默认是不可改变的(immutable)。
    如果你尝试给一个已经定义好的变量重新赋值,那么就会报错。

    fn main() {
        let x = 5;
        println!("The value of x is: {}", x);
        x = 6;
        println!("The value of x is: {}", x);
    }
    
    error[E0384]: cannot assign twice to immutable variable `x`
    

    可变性变量

    变量只是默认不可变;可以在变量名之前加 mut 来使其可变。
    但是可变性变量重新赋值不能改变其本身的类型。

    fn main() {
        let mut x = 5;
        println!("The value of x is: {}", x);
        x = 6;
        println!("The value of x is: {}", x);
    }
    
    The value of x is: 5
    The value of x is: 6
    

    使用大型数据结构时,适当地使用可变变量,可能比复制和返回新分配的实例更快。对于较小的数据结构,总是创建新实例,采用更偏向函数式的编程风格,可能会使代码更易理解,为可读性而牺牲性能或许是值得的。

    常量

    类似于不可变变量,常量(constants) 是绑定到一个名称的不允许改变的值,不过常量与变量还是有一些区别。
    首先,不允许对常量使用 mut。常量不光默认不能变,它总是不能变。

    const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
    

    [隐藏(Shadowing)

    fn main() {
        let x = 5;
    
        let x = x + 1;
    
        {
            let x = x * 2;
            println!("The value of x in the inner scope1 is: {}", x);
        }
       {
            let x = "abc";
            println!("The value of x in the inner scope2 is: {}", x);
        }
    
        println!("The value of x is: {}", x);
    }
    
    The value of x in the inner scope1 is: 12
    The value of x in the inner scope1 is: abc
    The value of x is: 6
    

    这段代码在JavaScript里面是错误的,但是在rust里面是正确的。
    我们可以定义一个与之前变量同名的新变量。Rustacean 们称之为第一个变量被第二个隐藏 了,这意味着程序使用这个变量时会看到第二个值。可以用相同变量名称来隐藏一个变量,以及重复使用 let 关键字来多次隐藏。
    而且隐藏的时候,当再次使用 let 时,实际上创建了一个新变量,我们可以改变值的类型,并且复用这个名字。这在可变性变量里面是不允许的,因为可变性变量是赋值,而隐藏是重新创建了一个同名的新变量。

    相关文章

      网友评论

          本文标题:1# 变量、可变性变量、常量、隐藏(Shadowing)

          本文链接:https://www.haomeiwen.com/subject/cvhilrtx.html