我發現這個鏽代碼從stdin
得到一個行:如果不使用返回值,`unwrap()`的目的是什麼?
use std::io;
fn main() {
let mut line = String::new();
io::stdin().read_line(&mut line).unwrap();
println!("Input: {}", line);
}
io::stdin().read_line(&mut line)
的line
變量設置爲從stdin
讀取一行。根據我的理解,read_line()
返回一個Result
的值,它可以是模式匹配的,或者如果它不是Err
,則可以使用.unwrap()
來獲得內部值。
但是,從不使用返回值read_line()
。僅使用line
字符串變量,但即使未使用,大多數時間人們也會使用.unwrap()
。
如果不使用返回值,unwrap()
的用途是什麼?只是要拋出一個錯誤?
*有點編譯器的魔力* - 它不限於編譯器,FWIW。任何用戶類型也可以用'#[must_use]'註釋。 – Shepmaster
@Shepmaster:當然,這個屬性本身*是*魔法(我會爭論的是黑魔法)。我的意思是,如果Rust支持線性類型(而不僅僅是仿射類型),它可以在類型系統中「正確地」建模,但是它不會,而是我們有這個小屬性,它使得類型「接近線性」但並非相當」。 –