例子:
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