use std::io;
fn main() {
println!("Guess the number!");
println!("Please input your guess.");
let mut guess = String::new();
io::stdin().read_line(&mut guess)
.expect("Failed to read line");
println!("You guessed: {}", guess);
}
println!("Guess the number!");
println!打印信息宏
let mut guess = String::new();
mut可变变量,默认不带mut,不可修改变量
Stirng::new()类似C++的静态函数调用
io::stdin().read_line(&mut guess)
.expect("Failed to read line");
io::stdin()返回类似c++的cin
read_line类似<<函数
expect为异常处理
调用io::stdin需要先引入use std::io包;
::new 那一行的 :: 语法表明 new 是 String 类型的一个 关联函数(associated
function)。关联函数是针对类型实现的,在这个例子中是 String ,而不是 String 的某个
特定实例。一些语言中把它称为 静态方法(static method)。
read_line 的工作是,无论用户在标准输入中键入什么内容,都将其存入一个字符串中,因
此它需要字符串作为参数。这个字符串参数应该是可变的,以便 read_line 将用户输入附加
上去。
& 表示这个参数是一个 引用(reference),
.expect("Failed to read line");
实际是昂read_line函数返回的io::Result对象的子函数,用于在出错的的时候将语句输出到stderr
整个还是像c++的函数调用返回一个对象,并通过对象的.语法继续调用这个返回对象的成员函数
use std::io;
use std::cmp::Ordering;
use rand::Rng;
fn main() {
// ---snip---
println!("You guessed: {}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => println!("You win!"),
}
}
match语法可以初步理解为c++的switch散弹
guess是String类型,有cmp成员函数,切其返回一个枚举类型,然后在后面的{}中进行匹配。
再来看看错误处理
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};
这是一个赋值语句,只是使用了额外的表达式进行求值。
guess.trim().parse()将trim去空格,parse将字符串解析成数值,如果parse执行成功,则将解析的数值作为OK的参数num带出,即成功走OK分支返回num值,并将num值绑定到guess变量,失败走Err分支执行continue继续执行
以上只是初步了解Rust的语法,我的目的是快速阅读rust编程手册,然后能后快速看懂Rust代码,熟悉quiche的库。
故而实例细节以及更基础的语法暂时不管。后面章节在看。
以上结合c++对rust基本的变量声明,函数调用,错误处理有初步认知。