2、变量
变量
声明变量
在Rust中,使用 let 关键字可以声明变量,例如:
let x = 42;
let只是指明了这是一个变量,有点好奇为什么用let。
其实熟悉JavaScript的话应该知道,let来自于JavaScript声明变量的关键字(它是ES6(ECMAScript 2015)引入的一种声明变量的新方法,用于定义块级作用域的局部变量。)
类型
所有的rust的变量都要有明确的类型,类型可以由开发者自己明确指定,或者让编译器自动推导类型
声明变量的方式其实已经接触过了
let num:u32 = 25565;
//let <变量名>:<变量类型> = <表达式>;
类型推导
编译器其实可以通过上下文自动推导变量的类型,如果上下文推导不出来,那不同类型的字面量也有自己的默认类型
比如下面这个例子:
let x=42;
let y:u32=x;
上面的代码运行编译之后,x的类型就是u32类型了,因为rust编译器会自动联系上下文,第二行代码x作为等式右边的变量出现了,那就意味着x绝对是u32类型(rust的特性标志了这个结论可以只在这一行代码内得到),既然x从第二行代码得到他是u32类型了,那么第一行的x其实类型也就是u32了。
假如你给x指定i32,那么这两行代码绝对会报错,因为rust不支持自动类型转换!
也正是因为只有让x为u32类型,程序才不会报错,所以只有这一种自动推导类型的结果可用。
类型推导的限制
注意一点,rust在大多数情况下类型推导是存在无法避免的问题的,这个时候需要开发者手动明确指定变量的具体类型,后面的学习当中会遇到很多
函数参数中的变量
在函数参数中,变量也可以用类似上述的方式定义,函数的参数也是变量
fn add_one(x:u32)->u32{
x+1
}
在上述代码中,x这个参数的类型被设定为u32,返回值的类型也是u32,这里不需要 let 关键字,关于函数的内容,还是等后面具体学了再研究吧
rust官方说,“这个约束允许 Rust 编译器(以及我们人类)无需查看其实施即可理解函数的签名。这对编译速度来说是一个很大的提升!”
额,为什么给了编译速度一个很大的提升?我查阅了相关资料,没有搞明白这一点。“相比C++而言,C++在实际调用函数之前,无法看到具体的代码,也就是说这些函数里面的细节是很明确的,如果你改动了一些内容,那就需要整个重新编译,而rust无需查看函数体,只从签名就能分析出来这个函数的可用性,所以编译效率会比C++高很多”
上面这一块没太理解,先挖个坑,之后再来填
初始化变量
变量定义时可以不赋具体的值,但是不赋值的变量无法参与运算,会报错
还要注意的一点是,如果不赋值,只定义变量,那么你必须指明它的类型
练习
RustRover提供了练习题,我们可以完成一下
// 👇 The lines below, starting with `///`, are called **documentation comments**.
// They attach documentation to the item that follows them. In this case, the `speed` function.
// If you run `cargo doc --open` from this exercise's directory, Rust will generate
// HTML documentation from these comments and open it in your browser.
/// Given the start and end points of a journey, and the time it took to complete it,
/// calculate the average speed.
pub fn speed(start: u32, end: u32, time_elapsed: u32) -> u32 {
// TODO: define a variable named `distance` with the right value to get tests to pass
// Do you need to annotate the type of `distance`? Why or why not?
let /*TODO*/ // Don't change the line below
distance / time_elapsed
}
分析一下,是让我们完成这个函数,补充/**/部分的代码,这个函数返回速度,我们一直时间,让我们定义一个变量“distance”作为距离,同时要算出距离
其实很简单,直接end-start就好了
let distance = end - start;
以上就是变量这一节的学习日记,我们下次再见