事实上,每个非”Hello,World”的Rust程序都需要使用到变量绑定。就像这样:
fn main(){
let x=5;
}
其他编程语言把这个称为变量,但是Rust的变量绑定有所不同。例如,一个let
表达式左边是一个”pattern(即模式)”,而不是一个变量名。这意味着我们可以这样写:
let (x,y)=(1,2);
这个表达式执行后,x的值是1,y的值是2.模式这个特点非常强大,这本书有单独的章节讲解它。
Rust是静态类型的语言,这意味着要在之前声明好我们的变量类型,然后再编译的时候检查的。那么我们的第一个例子是如何工作的呢?Rust把这个东西叫做”type inference(类型推断)”。如果类型推动能够推算出变量是什么类型的话,那么你就不必明确声明一个变量的类型。
如果我们想要明确指出变量类型的话,可以在:
后加上类型:
let x:i32 =5;
用自然语言表述就是:x绑定的类型是i32
,绑定的值是5
。
在这个例子中,x代表的32位整数。Rust有许多初始的整数类型,它们开头以i
代表有符号整数,u
代表无符号整数。可能的整数大小是8、16、32位。
以后,我们可能以注释的形式来声明变量类型。如下面:
fn main(){
let x=5;//x:i32
}
在Rust中,变量绑定是immutable(不可改变)的。下面这段代码是错误的:
let x=5;
x=10;
执行后,错误信息是:
src/main.rs:3:5: 3:8 error: re-assignment of immutable variable `x` [E0384]
src/main.rs:3 x=6;
^~~
src/main.rs:2:9: 2:10 note: prior assignment occurs here
src/main.rs:2 let x=5;
如果想要绑定的变量可变,你可以使用mut
:
let mut x=5;
x=6;
在Rust中,在使用变量前,要确保绑定变量要用一个值来初始化。
看下面的代码:
src/main.rs:3:39: 3:40 error: use of possibly uninitialized variable: `x` [E0381]
src/main.rs:3 println!("The value of x is :{}",x);
记住:Rust不会让我们使用一个没有初始化值的变量。
我们来看一下添加到println
里面的内容:
如果你在要打印的字符串中包含大括号” { }”的话,Rust会理解成你要在字符串中插入值。在上例中,我们在字符串中添加了一个” , “和” x “来表明” x “是我们想要插入的值。