RUST 筆記(一)

東方柏發表於2018-11-04

 記錄在學習的過程中rust語言和javajs相似的地方,以及rust的特性

  1. 引用外部包:extern crate rand; // crate 代表依賴,rand 是依賴名稱
  2. 引用內部預設包:use std::io; // 使用標準包下的io,也可以在使用時全路徑指定,如std::io::stdin();
  3. 引入了巨集,如常用的print!("hello, {}", "zhangsan"); // 感嘆號代表使用的是巨集,不是函式
  4. 一般用let定義變數,且變數預設是不可以改變的,用mut修飾就可以改變,且傳參時支援&地址引用;const定義常量,任何時候都不可改變
  5. u32表示無符號的32位整形(有符號表示為正數,如i32)

答疑:
6. 為什麼使用::而是不是.?

這兩個冒號(::)是運算子,允許將特定的某個函式置於某型別的名稱空間(namespace)下。

  1. &引用

& 是引用,為什麼需要引用,因為涉及到垃圾回收,如下

{
let s1 = String: from("hello");
let s2 = s1; // 這裡 s1 失效了,因為在任意給定時間,要麼 只能有一個可變引用(不允許存在競爭),要麼 只能有多個不可變引用
doSomeThing(s1); // 同樣也是失效,因為引數也是賦值,如果想不失效,應使用&引用
}
猜數字遊戲 Demo
extern crate rand;

use std::io;
use std::cmp::Ordering;
use rand::Rng;

fn main() {
    println!("Guess the number!");
    println!("Please input your guess.");
    let secret_number = rand::thread_rng().gen_range(1, 101);
    // println!("the sceret number is {}", secret_number);
    loop {
        let mut guess = String::new();
        io::stdin().read_line(&mut guess).expect("Failed to read line");
        println!("You guessed: {}", guess);
        let guess: u32 = match  guess.trim().parse() {
            Ok(num) => num,
            Err(_) => {println!("Please type a number!");continue},
        };
        match guess.cmp(&secret_number) {
         Ordering::Less => println!("Too small"),
         Ordering::Greater => println!("Too big"),
         Ordering::Equal => {println!("You win");break;},
        }
    }
}


相關文章