rust 基础

猜数游戏示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use std::io;
use rand::Rng;
use std::cmp::Ordering;

fn main() {
println!("猜数");

let number = rand::thread_rng().gen_range(1..100);

println!("神秘数字{}",number);

println!("请输入一个数!");

loop{
let mut guess = String::new();

// expect 处理错误信息
io::stdin().read_line(&mut guess).expect("读取数据失败");

// 类型转换 使用 match是错误处理的另一种常用方式
let guess:u32 = match guess.trim().parse(){
Ok(num) => num,
Err(_) => continue
};

println!("你猜测的数字{}",guess);

match guess.cmp(&number){
Ordering::Less => println!("偏小"),
Ordering::Equal=> {println!("赢了");break;},
Ordering::Greater=> println!("偏大")
}
}

}

变量

let 是定义变量的关键字,但是默认变量是不允许修改的,如果需要修改变量的话需要使用关键字 mut

1
2
3
4
5
let name = "cjp";
name = "gphper"; //错误

let mut name = "cjp";
name = "gphper"; //正确

变量中的 Shadow
变量可以使用let声明相同名称不同类型的变量

1
2
3
let student = "bob";
student = student.len() // 错误,因为变量不可变
let student:u32 = student.len() // 这种完成没问题

和常量的区别

  • 常量可以在任意位置定义,且必须声明类型 const MAX_NUM:u32 = 20;
  • 常量一旦定义不能修改

数据类型

标量

*整型、浮点型、字符型、布尔型

复合类型

tuple 类型:可以由多个不同类型的值组成

1
2
3
4
5
6
7
8
9
10
11
fn main() {
let t:(i32,f64,&str) = (10,3.4,"hello");

// 直接访问
println!("{},{},{}",t.0,t.1,t.2);

// 分别赋值访问
let(x,y,z) = t;

println!("{},{},{}",x,y,z);
}

数组类型:由相同类型的值组成

1
2
3
4
5
6
// 正常生成数组类型
let arr:[i32;5] = [1,2,3,4,6];
println!("Array {:?}", arr);
// 也可以这样生成数组中元素值一致的数组
let arr1 = [3;5];
println!("Array {:?}",arr1);

函数

1
2
3
4
5
6
7
8
9
10
11
12
13
fn main() {
show(3);
let result = show_data();
println!("{}",result);
}

fn show(x:i32){
println!("{}",x)
}

fn show_data() -> i32 {
5 // 返回值不能加 ;
}
  • 注意返回值的书写方式

if 语句

1
2
3
4
5
6
let m = 3;
if m > 3{
println!("大于3");
}else{
println!("小于等于3");
}

if属于表达式,所以可以为变量赋值

1
2
let number = if m == 3 { 3 } else { 0 };
println!("最后的数值是{}",number);

循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
fn main() {
let mut count = 0;

// 注意loop可以在break处赋值
let result = loop{
count += 1;
if count == 10{
break count*2;
}
};
println!("result 结果{}",result);

let mut m = 10;
while m > 1{
println!("m is {}",m);
m -= 1;
}

let arr = [1,2,3,4,5];
for item in arr.iter(){
println!("array item is {}",item);
}

// 使用range
for ritem in (1..4).rev(){
println!("range item is {}",ritem);
}

}