Şununla ilgili belgeleriFile
okuyorum :
//..
let mut file = File::create("foo.txt")?;
//..
Nedir ?
bu satırda? Daha önce Pas Kitabında gördüğümü hatırlamıyorum.
Şununla ilgili belgeleriFile
okuyorum :
//..
let mut file = File::create("foo.txt")?;
//..
Nedir ?
bu satırda? Daha önce Pas Kitabında gördüğümü hatırlamıyorum.
Yanıtlar:
Fark etmiş olabileceğiniz gibi, Rust'un istisnaları yok. Paniklere sahiptir, ancak işlevleri sınırlıdır (yapılandırılmış bilgileri taşıyamazlar) ve hata işleme için kullanımları önerilmez (kurtarılamaz hatalar içindir).
Rust'ta hata işleme kullanır Result
. Tipik bir örnek şöyle olabilir:
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,
Err(e) => return Err(e),
};
// use `i`
}
Bu harika çünkü:
İdeal olmaktan çok daha az, ancak çok ayrıntılı. Soru işareti operatörünün ?
devreye girdiği yer burasıdır .
Yukarıdakiler şu şekilde yeniden yazılabilir:
fn do_the_thing(i: i32) -> Result<i32, Error> {
let i = halves_if_even(i)?;
// use `i`
}
ki bu çok daha özlü.
?
Burada ne anlama geliyor match
yukarıdaki ifadeye eşdeğerdir . Kısaca: Result
eğer OK paketini açar ve değilse hatayı döndürür .
Bu biraz sihirdir, ancak hata işleme, standart metnin kesilmesi için biraz sihre ihtiyaç duyar ve istisnaların aksine, hangi işlev çağrılarının hata yapıp yapmayacağı hemen görülebilir: süslenmiş olanlar ?
.
Büyünün bir örneği, bunun da şunlara yaramasıdır Option
:
// Assume
// fn halves_if_even(i: i32) -> Option<i32>
fn do_the_thing(i: i32) -> Option<i32> {
let i = halves_if_even(i)?;
// use `i`
}
Bu, (kararsız) Try
özellik tarafından desteklenmektedir .
Ayrıca bakınız:
Result
veya Option
.
Kurtarılabilir hata tipi Sonuç <T, E> için hata yayılımı içindir. Sonucu çözer ve size içsel değeri verir.
Hata durumunu ele almak yerine, onu arayan koduna yayarsınız ve yalnızca Tamam durumuyla ilgilenirsiniz. Bunun faydası, çok sayıda standart metni ortadan kaldırması ve işlevin uygulanmasını daha basit hale getirmesidir.
.unwrap()
Bir hata durumunda hangi paniğe kapılacağı ile karıştırılmamalıdır .