文章目录
安装与测试
可以从官网直接下载。下载rustup-init并运行之后,会打开命令行,选1默认安装,然后不出意外就安装完了。
安装完成后按照惯例查看一下版本,如不报错就算成功。
rust
>rustc --version
rustc 1.71.1 (eb26296b5 2023-08-03)
然后新建一个文件main.rs,rust中单行注释用//,多行注释用/**/。
rust
/*此文件为main.rs
单行注释用//,多行注释用/**/
println打印字符串,加上!会自动换行*/
fn main() {
println!("Hello, world!");
}
然后在命令行中通过rustc
编译成可执行文件,就可以运行了。
>rustc main.rs
>main.exe
hello world
变量
rust通过let
声明变量,默认情况下,变量的值不可更改,所以下面第二行代码就报错了。
rust
let a = 1; //声名一个变量
a = 2; //报错 cannot assign twice to immutable variable
如果想新建一个可以变的变量,需要用到关键字mut
rust
let mut a = 1;
a = 2;
println!("{}", a); //输出为2,{}可把a转为字符串
但Rust是强类型语言,变量不可跨数据类型
rust
let mut a = 1;
a = 1.1; //报错,整数不能变浮点
a
在创建时,尽管未说明类型,但被自动推导为整型,所以无法变成浮点数。Rust
中整型包括有符号和无符号两类,每一类都有8, 16, 32, 64和128位五种。例如
rust
let a:u32 = 25; //a为无符号32位整型
此外,还有isize
和usize
,将根据计算机架构自动选择32位或者64位。
除了整型之外,还有以下数值类型
- 浮点类型有32位和64位,用f32, f64表示,默认为64位。
- 布尔型用bool表示,
- 字符型用char标识,字符类型长度为4字节。
- never类型用!表示,即无返回类型,类似于void
条件语句和函数
rust中,条件语句用if, else,判断条件无需用括号()
,代码段必须加{}
。函数用fn
声明,如有传入参数或返回值,都需要声明数据类型。
根据这两条规则,可以写一个阶乘函数
rust
fn fac(x:i32)->i32{
if x>1{
return x*fac(x-1);
}else{
return 1;
}
}
fn main(){
let x = fac(5);
println!("5!={}",x);
}
测试为
rust
>rustc main.rs
>main.exe
5!=120
在rust中,return a;
可以简写为a。所以上面的阶乘函数可以简写为
rust
fn fac(x:i32)->i32{
if x>1{x*fac(x-1)} else{1}
}
这就显得略酷,在rust中,任何{}
包含的程序块,只要最后一行是一个表达式(不以分号结尾),则这个表达式的结果就是程序块的返回值。
rust
fn test_block(){
let x ={
let y=1;
y+2
};
println!("{}",x); //输出为3
}
fn main(){
test_block();
}
于是很自然地,在rust支持三元表达式
rust
fn test_tri(x:i32){
let x = if x>5 {1} else {0};
println!("{}",x);
}
fn main(){
test_tri(4); //输出为0
test_tri(6); //输出为1
}
数组和元组
在rust
中,数组用[]
表示,例如
rust
let a = [1,2,3];
由于rust
是强类型,创建数组会自动进行类型推断,这个过程当然也可以手动
rust
let a : [i32 ; 3] = [1,2,3]; //声明a由3个i32构成
若想新建一个自然数列,其实有更简单的办法,例如
rust
let a = 1..5; //0,1,2,3,4
和数组相比,元组中允许放入不同的数据类型,由()
括起。
rust
let tup: (i32, f64, u8) = (500, 6.4, 1);
循环
rust
中有三种循环,分别是条件循环while
;遍历for
以及死循环loop
。
接下来,分别用这三种循环对a
进行遍历
rust
fn test_while(){
let a : [i32 ; 3] = [1,2,3];
let mut i = 0;
while i<3{
println!("a[{}] = {}", i, a[i]);
i += 1; //即 i = i+1
}
}
fn main(){
test_while();
}
输出为
rust
>rust main.rs
//由于main.rs中放了很多没用上的函数,所以会被警告
>main.exe
a[0] = 1
a[1] = 2
a[2] = 3
for
循环只有遍历的格式,即只能在数组中选择数字循环
rust
fn test_for(){
let a : [i32 ; 3] = [1,2,3];
for i in a{
println("{} ",i);
}
}//在mian中调用函数,后不再说明
最后,loop
执行的是死循环,只能用break的方式退出。