anyhow
Esnek uygulama hataları
anyhow, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.
Esnek Uygulama Hataları
Uygulama kodunda genellikle her hata için türü belirli bir enum tanımlamadan, hataları bağlam bilgisiyle üst katmanlara iletmek istersiniz. anyhow kasası tam olarak bunun için tek ve kullanımı kolay bir hata türü sağlar.
anyhow Ekleme
Bunu bir bağımlılık olarak ekleyin. thiserror ile iyi çalışır: kitaplıklar için thiserror, ikili dosyalar için anyhow.
[dependencies]
anyhow = "1.0"anyhow::Result Takma Adı
anyhow::Result<T>, Result<T, anyhow::Error> ifadesinin kısa yazımıdır. Error türü, std::error::Error uygulayan herhangi bir hatayı tutabilir.
use anyhow::Result;
fn load() -> Result<String> {
let text = std::fs::read_to_string("config.txt")?;
Ok(text)
}Otomatik Dönüştürme
? işleci, tüm standart hataları otomatik olarak anyhow::Error türüne dönüştürür; böylece hata türlerini serbestçe bir arada kullanabilirsiniz.
use anyhow::Result;
fn parse_file(path: &str) -> Result<i32> {
let text = std::fs::read_to_string(path)?; // io error
let n: i32 = text.trim().parse()?; // parse error
Ok(n)
}Bağlam Ekleme
.context() yöntemi bir hataya kullanıcı dostu bir ileti ekler ve işler başarısız olduğunda okunabilir bir zincir oluşturur.
use anyhow::{Context, Result};
fn read_config(path: &str) -> Result<String> {
let text = std::fs::read_to_string(path)
.context("failed to read config file")?;
Ok(text)
}Tembel Bağlam
İletiyi oluşturmak maliyetliyse veya çalışma zamanı verilerine ihtiyaç duyuyorsa with_context kullanın; kapanış yalnızca hata durumunda çalışır.
use anyhow::{Context, Result};
fn open(path: &str) -> Result<String> {
std::fs::read_to_string(path)
.with_context(|| format!("could not open {path}"))
}Anlık Hatalar Oluşturma
anyhow! makrosu bir iletiden hata oluşturur, bail! ise böyle bir hatayla erken döner.
use anyhow::{anyhow, bail, Result};
fn check(age: i32) -> Result<()> {
if age < 0 {
bail!("age cannot be negative");
}
if age > 150 {
return Err(anyhow!("age {age} is implausible"));
}
Ok(())
}ensure! Kullanma
ensure!, assert! gibidir; ancak paniğe neden olmak yerine bir hata döndürür.
use anyhow::{ensure, Result};
fn divide(a: i32, b: i32) -> Result<i32> {
ensure!(b != 0, "division by zero");
Ok(a / b)
}main içinde anyhow
Başarısızlık durumunda düzgün biçimlendirilmiş hata zincirlerinin yazdırılması için main içinden anyhow::Result<()> döndürün.
use anyhow::Result;
fn main() -> Result<()> {
let text = std::fs::read_to_string("data.txt")?;
println!("{text}");
Ok(())
}Nedeni İnceleme
anyhow::Error opak olsa da yine de inceleyebilirsiniz. Belirli bir hata türüne göre dallanmanız gerektiğinde downcast_ref somut hata türünü geri getirir.
use anyhow::Result;
fn report(err: anyhow::Error) {
if let Some(io) = err.downcast_ref::<std::io::Error>() {
println!("io error: {io}");
} else {
println!("other error: {err}");
}
}thiserror ve anyhow
Genel kural:
- thiserror — çağıranların üzerinde eşleştirme yaptığı türü belirli hatalara sahip kitaplıklar
- anyhow — hataları yalnızca bağlam bilgisiyle ileten uygulamalar
Bir thiserror hatasını ? ile sorunsuzca anyhow'a dönüştürebilirsiniz.
Kısa Kontrol
Bir hata üst katmanlara iletilirken ona açıklayıcı bir ileti ekleyen anyhow yöntemi hangisidir?
Özet
anyhow kasasını öğrendiniz:
anyhow::Result<T>, esnek tek bir hata türü kullanır?, tüm standart hataları otomatik olarak dönüştürür.context()/with_context(), okunabilir iletiler ekleranyhow!,bail!veensure!hata oluşturur- Uygulama (ikili dosya) kodu için en uygunudur
Sıkça Sorulan Sorular
“anyhow” dersi ücretsiz mi?
Evet — “anyhow” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.
“anyhow” dersinde ne öğreneceğim?
Esnek uygulama hataları Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“anyhow” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.