Tôi đang đọc the documentation for File
:Nhà điều hành đánh dấu câu hỏi này là gì?
//..
let mut file = File::create("foo.txt")?;
//..
các ?
trong dòng này là gì? Tôi không nhớ đã nhìn thấy nó trong Sách Rust trước đây.
Tôi đang đọc the documentation for File
:Nhà điều hành đánh dấu câu hỏi này là gì?
//..
let mut file = File::create("foo.txt")?;
//..
các ?
trong dòng này là gì? Tôi không nhớ đã nhìn thấy nó trong Sách Rust trước đây.
Như bạn có thể thấy, Rust không có ngoại lệ. Nó có hoảng loạn, nhưng chức năng của chúng bị hạn chế (chúng không thể mang thông tin có cấu trúc) và việc sử dụng chúng để xử lý lỗi không được khuyến khích (chúng có nghĩa là cho các lỗi không thể khôi phục).
Trong Rust, xử lý lỗi sử dụng Result
. Một ví dụ điển hình sẽ là:
fn halves_if_even(i: i32) -> Result<i32, Error> {
if i % 2 == 0 { Ok(i/2) } else { Err(/* something */) }
}
fn do_the_thing(i: i32) -> Result<i32, Error> {
let i = match halves_if_even(i) {
Ok(i) => i,
e => return e,
};
// use `i`
}
này là rất tốt vì:
Ít hơn lý tưởng, tuy nhiên, nó rất tiết kiệm. Đây là nơi mà các nhà điều hành dấu hỏi ?
do thỏa thuận hợp
ở trên có thể được viết lại như sau:.
fn do_the_thing(i: i32) -> Result<i32, Error> {
let i = halves_if_even(i)?;
// use `i`
}
mà là nhiều hơn nữa súc tích.
Điều gì ?
ở đây tương đương với tuyên bố match
ở trên. Tóm lại: nó mở ra Result
nếu OK và trả lại lỗi nếu không.
Đó là một chút phép thuật, nhưng việc xử lý lỗi cần một số phép thuật để cắt giảm bản mẫu, và không giống như trường hợp ngoại lệ, ngay lập tức có thể nhìn thấy chức năng nào có thể hoặc không thể lỗi: những trang được trang trí ?
.