四.入门猜字游戏

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基本的变量声明,函数调用,错误处理有初步认知。

原文地址:https://www.cnblogs.com/kuikuitage/p/13415922.html