• Rust: 变量


    变量的概念来源于数学,在计算机语言中,它是数据存取的基本单位。

    在 Rust 中,变量有很多不同于其他语言的地方,今天就来简单介绍一下。

    变量声明

    直接看下面代码:

    fn main() {
        // 使用let关键字声明一个变量
        let a = 1;
        
        // 也可以附带类型信息
        let b: i32 = 3;
        
        println!("{} {}", a, b);
    }
    

    Rust 使用 let 关键字来声明变量,乍一看,很像是动态语言,其实 Rust 是一门强类型语言,只不过编译器会根据变量的初始值推导出类型的。

    当然,我们也可以明确地为变量指定它的类型,只需要在变量名后面,加上冒号和类型名即可。

    上面代码中,变量 b 的类型是 i32,即 32 位有符号整数(32-bit signed integer),关于数据类型,我们后续会介绍到,这里简单了解就行了。

    需要注意的是,如果声明一个变量时,没有为其指定初始值,那就必须带上类型信息:

    fn main() {
        // 无初始值时 必须附带类型信息
        let a: i32;
    
        a = 1;
    
        println!("{}", a);
    }
    

    可变性

    使用 let 声明的变量,默认是不可变的(immutable),初学 Rust 的朋友,可能在不经意间就踩了坑:

    fn main() {
        let a = 1;
        
        println!("{}", a);
        
        // 编译器报错:不能二次赋值
        a = 3;
        
        println!("{}", a);
    }
    

    如果想在后续的代码中,对指定的变量进行更改,我们需要在声明时,为这个变量加上一个 mut 的限定词,表示这个变量是可变的(mutable),即可被更改的:

    fn main() {
        // 需要加上mut关键字
        // 表示该变量是mutable的
        let mut a = 1;
        
        println!("{}", a);
        
        // 成功被赋值
        a = 3;
        
        println!("{}", a);
    }
    

    不过,可不要忘了,Rust 是强类型语言,它仍然会检查赋值的类型:

    fn main() {
        let mut a = 1;
        
        // 编译报错 类型不符
        a = "HelloWorld";
        
        println!("{}", a);
    }
    

    变量遮盖

    与其他编程语言不太一样的是,Rust 允许在当前作用域重复声明多个同名变量,后面声明的变量,会遮盖前面声明的同名变量:

    fn main() {
        let a = 1;
        
        println!("{}", a);
        
        // 重新声明一个同名变量
        let a = a * 3;
        
        println!("{}", a);
    
        // 允许不同类型
        let a = "HelloWorld";
        
        println!("{}", a);
    }
    

    常量

    虽然使用 let 声明的变量,默认是不可更改的,但不适合作为常量使用,编译器会强制 let 变量使用 snake case 的命名风格,即 my_friend 全小写的方式,并且它不能在全局作用域声明。

    在 Rust 中,声明一个常量需要使用 const 关键字:

    // 全局常量
    const MAX_COUNT: i32 = 100;
    
    fn main() {
        println!("{}", MAX_COUNT);
    }
    

    需要注意的是,常量必须采用全大写方式,也必须附带类型信息,最后,必须给定初始值。

    变量这一部分,就先介绍到这里了。

  • 相关阅读:
    RecyclerView 源码分析(一) —— 绘制流程解析
    sqlserver outer join
    获取最后一个标签 xpath
    pytesseract
    pytesseract代码优化
    sql server recursion
    sql
    sql server
    mssql乱码问题
    SQL
  • 原文地址:https://www.cnblogs.com/liuhe688/p/13416078.html
Copyright © 2020-2023  润新知