discuz做网站,百度网站模板免费下载,专做西餐的网站,php mysql网站开发实例变量#xff0c;基本类型#xff0c;函数#xff0c;注释和控制流#xff0c;这些几乎是每种编程语言都具有的编程概念。
这些基础概念将存在于每个 Rust 程序中#xff0c;及早学习它们将使你以最快的速度学习 Rust 的使用。
变量
首先必须说明#xff0c;Rust 是强类…变量基本类型函数注释和控制流这些几乎是每种编程语言都具有的编程概念。
这些基础概念将存在于每个 Rust 程序中及早学习它们将使你以最快的速度学习 Rust 的使用。
变量
首先必须说明Rust 是强类型语言但具有自动判断变量类型的能力。这很容易让人与弱类型语言产生混淆。
如果要声明变量需要使用 let 关键字。例如
let a 123;
只学习过 JavaScript 的开发者对这句话很敏感只学习过 C 语言的开发者对这句话很不理解。
在这句声明语句之后以下三行代码都是被禁止的
a abc;
a 4.56;
a 456;
第一行的错误在于当声明 a 是 123 以后a 就被确定为整型数字不能把字符串类型的值赋给它。
第二行的错误在于自动转换数字精度有损失Rust 语言不允许精度有损失的自动数据类型转换。
第三行的错误在于 a 不是个可变变量。
前两种错误很容易理解但第三个是什么意思难道 a 不是个变量吗
这就牵扯到了 Rust 语言为了高并发安全而做的设计在语言层面尽量少的让变量的值可以改变。所以 a 的值不可变。但这不意味着 a 不是变量英文中的 variable官方文档称 a 这种变量为不可变变量。
如果我们编写的程序的一部分在假设值永远不会改变的情况下运行而我们代码的另一部分在改变该值那么代码的第一部分可能就不会按照设计的意图去运转。由于这种原因造成的错误很难在事后找到。这是 Rust 语言设计这种机制的原因。
当然使变量变得可变mutable只需一个 mut 关键字。
let mut a 123;
a 456;
这个程序是正确的。
常量与不可变变量的区别
既然不可变变量是不可变的那不就是常量吗为什么叫变量
变量和常量还是有区别的。在 Rust 中以下程序是合法的
let a 123; // 可以编译但可能有警告因为该变量没有被使用
let a 456;
但是如果 a 是常量就不合法
const a: i32 123;
let a 456;
变量的值可以重新绑定但在重新绑定以前不能私自被改变这样可以确保在每一次绑定之后的区域里编译器可以充分的推理程序逻辑。 虽然 Rust 有自动判断类型的功能但有些情况下声明类型更加方便
let a: u64 123;
这里声明了 a 为无符号 64 位整型变量如果没有声明类型a 将自动被判断为有符号 32 位整型变量这对于 a 的取值范围有很大的影响。
重影Shadowing
重影的概念与其他面向对象语言里的重写Override或重载Overload是不一样的。重影就是刚才讲述的所谓重新绑定之所以加引号就是为了在没有介绍这个概念的时候代替一下概念。
重影就是指变量的名称可以被重新使用的机制
实例
fn main() {let x 5;let x x 1;let x x * 2;println!(The value of x is: {}, x);
}
这段程序的运行结果
The value of x is: 12
重影与可变变量的赋值不是一个概念重影是指用同一个名字重新代表另一个变量实体其类型、可变属性和值都可以变化。但可变变量赋值仅能发生值的变化。
let mut s 123;
s s.len();
这段程序会出错不能给字符串变量赋整型值。