Menu
Coddy logo textTech

Podsumowanie — atrapowy inteligentny wskaźnik

Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 58 z 61.

challenge icon

Wyzwanie

Łatwy

Zbudujmy atrapę inteligentnego wskaźnika o nazwie SmartBox, która pokaże, jak działają pod maską rzeczywiste inteligentne wskaźniki w Rust! Twój wrapper będzie generyczny, zapewni dostęp do swojej wewnętrznej wartości i automatycznie poinformuje o usuwaniu.

Rozmieścisz kod w dwóch plikach:

  • smart_box.rs: Zdefiniuj publiczną generyczną strukturę SmartBox<T> z jednym polem value typu T. Zaimplementuj funkcję asocjowaną new, która tworzy obiekt SmartBox i wyświetla komunikat o utworzeniu. Dodaj metodę get, która zwraca referencję do wewnętrznej wartości. Na koniec zaimplementuj cechę Drop, aby wyświetlała komunikat o usuwaniu, gdy obiekt SmartBox wyjdzie poza zakres.
  • main.rs: Włącz moduł smart_box i pokaż działanie SmartBox z dwoma różnymi typami. Utwórz SmartBox<i32> przechowujący liczbę oraz SmartBox<String> przechowujący tekst (oba na podstawie podanych danych wejściowych). Wyświetl wartości za pomocą metody get. Komunikaty Drop pojawią się automatycznie, gdy obiekty wyjdą poza zakres na końcu funkcji main.

Po utworzeniu obiektu SmartBox powinien on wyświetlić:

SmartBox created

Podczas uzyskiwania dostępu do wartości wyświetl ją w tym formacie:

Value: {value}

Po usunięciu obiektu SmartBox powinien on wyświetlić:

SmartBox dropped

Na przykład dla danych wejściowych 42 i Hello:

SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox dropped

Zauważ, że najpierw tworzone są oba obiekty, potem uzyskiwany jest dostęp do ich wartości, a na końcu, gdy kończy się funkcja main, oba są usuwane w odwrotnej kolejności (ostatni utworzony, pierwszy usunięty).

Otrzymasz dwa dane wejściowe: wartość całkowitą (parsowaną jako i32) oraz wartość tekstową.

Spróbuj swoich sił

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // Odczytaj dane wejściowe
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let number: i32 = input1.trim().parse().expect("Failed to parse number");
    
    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let text = input2.trim().to_string();
    
    // TODO: Utwórz SmartBox<i32> przechowujący liczbę
    
    // TODO: Utwórz SmartBox<String> przechowujący tekst
    
    // TODO: Wypisz wartości, używając metody get
    // Format: "Value: {value}"
    
    // Komunikaty Drop pojawią się automatycznie po zakończeniu main
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Rust online