Cecha Display
Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 36 z 61.
Chociaż Debug świetnie sprawdza się w przypadku programistów analizujących dane, cecha Display jest przeznaczona do wyświetlania informacji użytkownikom. To ona odpowiada za formatator {} w println!. W przeciwieństwie do Debug, Rust nie może automatycznie wyprowadzić cechy Display. Musisz zaimplementować ją ręcznie.
Aby zaimplementować Display, musisz zaimportować moduł fmt i zaimplementować metodę fmt:
use std::fmt;
struct Temperature {
celsius: f64,
}
impl fmt::Display for Temperature {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}°C", self.celsius)
}
}
Metoda fmt przyjmuje Formatter i zwraca fmt::Result. Użyj makra write!, aby sformatować wynik, uzyskując dostęp do pól struktury za pośrednictwem self.
Teraz możesz wyświetlić strukturę za pomocą standardowego formatera {}:
let temp = Temperature { celsius: 23.5 };
println!("{}", temp); // 23.5°C
Kluczowa różnica: wynik Debug pokazuje strukturę danych (przydatne podczas debugowania), natomiast wynik Display jest dopracowany i przeznaczony dla użytkowników końcowych. Struktura może implementować oba: użyj {:?} do debugowania i {} do czytelnego wyniku.
Wyzwanie
ŁatwyStwórzmy przyjazny dla użytkownika system wyświetlania produktów! Podczas gdy Debug pokazuje surową strukturę Twoich danych, cecha Display pozwala tworzyć dopracowane, czytelne dla ludzi dane wyjściowe, idealne dla użytkowników końcowych.
Rozmieścisz swój kod w dwóch plikach:
product.rs: Zdefiniuj publiczną strukturęProductz dwoma publicznymi polami:name(String) iprice(f64). Zaimplementuj cechęDisplaydla swojej struktury, tak aby formatowała dane jako{name} - ${price}. Pamiętaj, aby zaimportowaćstd::fmti użyć makrawrite!wewnątrz metodyfmt.main.rs: Zaimportuj moduł produktu i utwórz instancjęProductprzy użyciu podanych danych wejściowych. Wypisz produkt za pomocą standardowego formatera{}, aby wyświetlić własny format.
Cecha Display wymaga ręcznej implementacji metody fmt: Rust nie może wyprowadzić jej automatycznie tak jak Debug. Dzięki temu masz pełną kontrolę nad tym, jak Twój typ jest przedstawiany użytkownikom.
Dane wyjściowe powinny wyświetlać produkt w przejrzystym, przyjaznym dla użytkownika formacie:
{name} - ${price}Na przykład dla danych wejściowych Wireless Mouse i 29.99:
Wireless Mouse - $29.99Otrzymasz dwa dane wejściowe: nazwę produktu i cenę (odczytaj jako f64).
Spróbuj swoich sił
mod product;
use product::Product;
fn main() {
let mut name = String::new();
std::io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut price_input = String::new();
std::io::stdin().read_line(&mut price_input).expect("Failed to read line");
let price: f64 = price_input.trim().parse().expect("Failed to parse price");
// TODO: Utwórz instancję Product z podaną nazwą i ceną
// TODO: Wypisz produkt, używając formatera {}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Metody i zachowanie
Wprowadzenie do bloków implementacjiParametr selfMetody modyfikująceFunkcje powiązaneWiele bloków implementacjiŁańcuchowe wywoływanie metodPowtórzenie — działania na prostokącie4Projekt: Wirtualne zwierzątko
Definiowanie zwierzątkaKarmienie zwierzątka7Standardowe cechy
Cecha DebugCecha DisplayClone i CopyCechy równościPowtórka – punkt do wydrukowania10Projekt: System dokumentów
Trait DrawKomponent tekstowy2Hermetyzacja i moduły
Podstawy modułówSłowo kluczowe publicPola prywatneGetterySetteryPodsumowanie — bezpieczna skrytka5Typy generyczne
Struktury generyczneMetody generyczneWiele typów generycznychFunkcje generycznePodsumowanie – punkt współrzędnych8Cechy jako ograniczenia
Składnia ograniczeń cechWiele ograniczeńKlauzula whereZwracanie typów z użyciem cechPodsumowanie — generyczna drukarka11Wzorce projektowe w Rust
Wzorzec NewtypeKompozycjaTrait DropFrom i IntoPodsumowanie — atrapowy inteligentny wskaźnik3Zaawansowane typy wyliczeniowe
Typy wyliczeniowe z danymiMetody typów wyliczeniowychDopasowywanie wariantów danychTyp wyliczeniowy Option — powtórzeniePodsumowanie — typ wyliczeniowy Shape6Definiowanie cech
Czym jest cecha?Implementowanie cechImplementacje domyślneNadpisywanie wartości domyślnychCechy z parametramiPowtórzenie — odtwarzacz multimedialnyPoćwicz samodzielnie: Kompilator Rust online