zoukankan      html  css  js  c++  java
  • Rust学习--变量

    0x0

    每种编程语言都有变量的概念,我们可以把变量理解为最简单的存储方式,它是编码过程中是必不可少的。

    Rust的变量很有特色。变量不可变的特性让人想起了Erlang。以及后面的模式匹配,我觉得作者应该受Erlang影响很大。

    下面主要介绍一下Rust中变量的几个特性。

    • 不可变
    • 让变量可变
    • 变量与常量的区别
    • 隐藏/覆盖

    0x1 不可变(immutable)

    Rust怎么使用变量呢?

    let x = 5;
    

    和其他语言很像,但是变量不能在生命周期内再做如下操作了

    x = 6;
    

    这样的话会通不过编译,这就是变量不可变的特性。

    为什么要这么做呢?说一下我的理解。

    这个特性可以规避掉很多问题,比如一些常见的低级逻辑错误。

    更重要的是,这个特性会影响到多线程并发编程。变量不再可变,就不存在临界资源问题,也就不需要引入锁,这会影响到使用者对并发模型的选择和设计。(不评价这种特性的好坏,毕竟这是语言的特性,选择了它就要接受它)。

    0x2 让变量可变

    如果你熟练使用其他语言的话,会很不适应变量不可变的这种设定。当然了,作者并没有把路堵死,他还留下了一个关键字 -- mut。

    let mut x = 5;
    x = 6;
    

    mut让变量可变成为了可能。

    不过,如果没有必要,我是不推荐使用这个关键字的。它为了便捷而破坏了Rust的设计原则,让代码变得不再安全可控。

    0x3 变量与常量的区别

    到这里,恐怕有些同学已经提出疑问了,const不香吗?

    Rust也支持const,这个关键字用来定义常量。真正的不可变。

    const和let这两个关键字的区别是什么?

    • const不能和mut组合使用

    • const必须写明值的类型

    • const可以定义在任何作用域

    • const只能被初始化为常量表达式,不能是函数调用的结构,也不能是运行时才计算出来的结果

      const MAX_POINTS: u32 = 100;

    说一下我的理解

    const应该是个语法糖,它在编译期被解释为和let一样的特性。所以它不能接收运行时计算的结果。

    0x4 隐藏/覆盖(Shadowing)

    let x = 5;
    let x = x + 1;
    let x = x * 2;
    

    使用let关键字,可以覆盖之前同名的变量。以上表达式得到的结果是12

    当你迫切的想修改一个变量,这个变量又没有使用关键字mut时,可以用let覆盖上一次的变量。

    它的本质是创建一个新变量。所以可以任意修改变量的类型,而mut是不能修改类型的。

    let spaces = "   ";
    let spaces = spaces.len();
    

    let mut spaces = " ";

    spaces = spaces.len();

    前两句代码是可以编译通过的,后两句不行。

    0x5 总结

    记住三个关键字

    • let 定义变量,覆盖变量
    • mut 让变量可变
    • const 常量
    作者:三石君
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    Linux下安装firefox最新版
    php开发网站编码统一问题
    WordPress前台后台页面打开慢的解决方法
    超链接标签简单的几个样式属性
    jQuery结合Ajax实现简单的前端验证和服务端查询
    Javascript配合jQuery实现流畅的前端验证
    Code-Validator:验证只包含英文字母
    Code-Validator:验证小数
    Code-Validator:验证正整数
    Code-Validator:验证非负整数
  • 原文地址:https://www.cnblogs.com/zhroot/p/12342158.html
Copyright © 2011-2022 走看看