Nutrire l'animale
Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 20 di 61.
Sfida
FacileOra che il tuo animale domestico esiste, è il momento di dargli la capacità di mangiare! In questo passaggio, aggiungerai un metodo feed che ti permette di prenderti cura della fame del tuo animale domestico.
Partendo dal modulo pet.rs che hai già, aggiungi un metodo feed che riduca il livello di fame dell'animale domestico. Quando viene nutrito, la fame dell'animale dovrebbe diminuire di 30, ma non dovrebbe mai scendere sotto 0. Dopo averlo nutrito, il metodo dovrebbe stampare un messaggio che mostri che l'animale ha gradito il pasto.
Ti servirà anche un metodo getter hunger per poter controllare il livello di fame dell'animale dall'esterno del modulo.
In main.rs, leggerai il nome dell'animale e un valore iniziale della fame. Crea il tuo animale, imposta la sua fame iniziale, dagli da mangiare una volta e poi mostra il livello di fame aggiornato.
L'output dovrebbe seguire questo formato:
{name} enjoyed the meal!
Hunger: {hunger_level}Per esempio, se l'input è:
Buddy
50L'output dovrebbe essere:
Buddy enjoyed the meal!
Hunger: 20E se la fame iniziale è 20, dar da mangiare all'animale la porterebbe a 0 (non a un valore negativo):
Buddy enjoyed the meal!
Hunger: 0Dovrai aggiungere un metodo set_hunger per inizializzare la fame a scopo di test, dato che il costruttore new imposta la fame a 0 per impostazione predefinita.
Provalo tu
mod pet;
use pet::Pet;
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 my_pet = Pet::new(name);
println!("Pet name: {}", my_pet.name());
}Tutte le lezioni di Programmazione orientata agli oggetti
1Metodi e comportamento
Introduzione ai blocchi implIl parametro selfMetodi mutabiliFunzioni associateBlocchi impl multipliConcatenamento di metodiRiepilogo - Azioni sul rettangolo4Progetto: animale domestico virtuale
Definire l'animaleNutrire l'animale7Trait standard
Il trait DebugIl trait DisplayClone e CopyTrait di uguaglianzaRiepilogo - Punto stampabile10Progetto: sistema di documenti
Il trait DrawComponente di testo2Incapsulamento e moduli
Nozioni di base sui moduliLa parola chiave publicCampi privatiGetterSetterRiepilogo - Armadietto sicuro5Generics
Struct genericheMetodi genericiPiù tipi genericiFunzioni genericheRipasso - Punto di coordinate8I Trait come vincoli
Sintassi dei vincoli sui traitVincoli multipliLa clausola whereRestituire tipi con i traitRiepilogo - Stampante generica11Modelli di progettazione in Rust
Pattern NewtypeComposizioneIl trait DropFrom e IntoRipasso - Mock con smart pointer3Enumerazioni avanzate
Enumerazioni con datiMetodi sulle enumerazioniCorrispondenza delle varianti con datiL'enumerazione Option ripresaRiepilogo - enumerazione Shape6Definizione dei trait
Che cos’è un trait?Implementare i traitImplementazioni predefiniteSovrascrivere le implementazioni predefiniteTrait con parametriRiepilogo - Lettore multimedialeEsercitati da solo: Compilatore Rust online