Rust編程進階:074、never type介紹

例子:
Cargo.toml文件內容:

[package]
name = "learn_htype2"
version = "0.1.0"
authors = ["anonymousGiga <[email protected]>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "0.6.0"

main.rs文件內容:

//2、從不返回的never type
//Rust 有一個叫做 ! 的特殊類型。在類型理論術語中,它被稱爲 empty type,因爲它沒有值。
//我們更傾向於稱之爲 never type。在函數不返回的時候充當返回值
//fn bar() -> ! {
//    loop{}
//}

//以下例子爲《Rust程序設計語言》中第二章“猜猜看”遊戲的例子
use std::io;
use std::cmp::Ordering;
use rand::Rng;
fn main() {
    println!("Guess the number!");
    let secret_number = rand::thread_rng().gen_range(1, 101);
    loop {
        println!("Please input your guess.");
        let mut guess = String::new();
        io::stdin().read_line(&mut guess)
            .expect("Failed to read line");
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue, //continue 的值是 !。
                                //當 Rust 要計算 guess 的類型時,它查看這兩個分支。
                                //前者是 u32 值,而後者是 ! 值。
                                //因爲 ! 並沒有一個值,Rust 決定 guess 的類型是 u32
        };
        println!("You guessed: {}", guess);
        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            }
        }
    }
}


//panic!
//Option<T> 上的 unwrap 函數代碼:
//impl<T> Option<T> {
//    pub fn unwrap(self) -> T {
//        match self {
//            Some(val) => val,
//            None => panic!("called `Option::unwrap()` on a `None` value"),
//        }
//    }
//}

本節全部源代碼:
https://github.com/anonymousGiga/learn_rust/tree/master/learn_htype2
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章