let 创建变量 rust变量默认不可变

let foo = 5; // 不可变

let mut bar = 5; // 可变

let mut guess = String::new();

new为关联函数 关联函数是针对类实现的,而不是String特定实例 也可成为静态方法

new创建了一个空字符串实例

io::stdin().read_line(&mut guess).expect(“Failed to read line”);

stdin 函数返回一个 std::io::Stdin 的实例,这代表终端标准输入句柄的类型。 .read_line(&mut guess),调用 read_line 方法从标准输入句柄获取用户输入。 & 表示这个参数是一个 引用reference),它允许多处代码访问同一处数据,而无需在内存中多次拷贝。 当使用 .foo() 语法调用方法时,通过换行加缩进来把长行拆开是明智的。即变成多行 read_line 将用户输入附加到传递给它的字符串中,不过它也返回一个值——在这个例子中是 io::Result io::Result 的实例拥有 expect方法。如果 io::Result 实例的值是 Errexpect 会导致程序崩溃,并显示当做参数传递给 expect 的信息。

let guess: u32 = guess.trim().parse() .expect(“Please type number!”);

Rust 允许用一个新值来 隐藏shadowguess 之前的值 表达式中的 guess 是包含输入的原始 String 类型。String 实例的 trim 方法会去除字符串开头和结尾的空白字符。u32 只能由数字字符转换,不过用户必须输入 enter 键才能让 read_line 返回,然而用户按下 enter 键时,会在字符串中增加一个换行(newline)符。例如,用户输入 5 并按下 enter,guess 看起来像这样:5\n\n 代表 “换行”,回车键。trim 方法消除 \n,只留下 5

字符串的parse方法 将字符串解析成数字。因为这个方法可以解析多种数字类型,因此需要告诉 Rust 具体的数字类型,这里通过 let guess: u32 指定。guess 后面的冒号(:)告诉 Rust 我们指定了变量的类型。Rust 有一些内建的数字类型;u32 是一个无符号的 32 位整型。

use std::cmp::Ordering

Ordering 也是一个枚举,不过它的成员是 LessGreaterEqual

crate

crate 是一个 Rust 代码包。我们正在构建的项目是一个 二进制 crate,它生成一个可执行文件。

https://crates.io/ 下载和查看最新版本的包

rand = “0.5.5” 包 版本

match

一个 match 表达式由 分支(arms) 构成。一个分支包含一个 模式pattern)和表达式开头的值与分支模式相匹配时应该执行的代码。Rust 获取提供给 match 的值并挨个检查每个分支的模式。
  1. let guess: u32 = match guess.trim().parse() {
  2. Ok(num) => num,
  3. Err(_) => continue,
  4. };
如果 parse 能够成功的将字符串转换为一个数字,它会返回一个包含结果数字的 Ok。这个 Ok 值与 match 第一个分支的模式相匹配,该分支对应的动作返回 Ok 值中的数字 num,最后如愿变成新创建的 guess 变量。 如果 parse 能将字符串转换为一个数字,它会返回一个包含更多错误信息的 ErrErr 值不能匹配第一个 match 分支的 Ok(num) 模式,但是会匹配第二个分支的 Err() 模式: 是一个通配符值,本例中用来匹配所有 Err 值,不管其中有何种信息。

loop

创建循环

mut

变量默认是不可变的

  1. fn main() {
  2. let x = 5;
  3. println!("The value of x is: {}", x);
  4. x = 6;
  5. println!("The value of x is: {}", x);
  6. }
  7. fn main() {
  8. let mut x = 5;
  9. println!("The value of x is: {}", x);
  10. x = 6;
  11. println!("The value of x is: {}", x);
  12. }