Resumen - Mock de Smart Pointer
Parte de la sección Programación Orientada a Objetos del Journey de Rust de Coddy. Lección 58 de 61.
Desafío
Fácil¡Construyamos un simulacro de puntero inteligente llamado SmartBox que demuestre cómo funcionan internamente los punteros inteligentes reales de Rust! Tu envoltorio será genérico, proporcionará acceso a su valor interno y anunciará automáticamente cuándo se está liberando.
Organizarás tu código en dos archivos:
smart_box.rs: Define una estructura genérica públicaSmartBox<T>con un único campovaluede tipoT. Implementa una función asociadanewque cree un SmartBox e imprima un mensaje de creación. Añade un métodogetque devuelva una referencia al valor interno. Por último, implementa el traitDroppara imprimir un mensaje de liberación cuando el SmartBox salga de su ámbito.main.rs: Incluye tu módulo smart_box y demuestra tu SmartBox con dos tipos diferentes. Crea unSmartBox<i32>que contenga un número y unSmartBox<String>que contenga texto (ambos provenientes de las entradas proporcionadas). Imprime los valores usando tu métodoget. Los mensajes de Drop aparecerán automáticamente cuando las cajas salgan de su ámbito al final de main.
Cuando se cree un SmartBox, debe imprimir:
SmartBox createdAl acceder al valor, imprímelo con este formato:
Value: {value}Cuando se libere un SmartBox, debe imprimir:
SmartBox droppedPor ejemplo, con las entradas 42 y Hello:
SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox droppedObserva cómo primero se crean ambas cajas, después se accede a sus valores y, finalmente, ambas se liberan en orden inverso (la última creada es la primera en liberarse) cuando termina main.
Recibirás dos entradas: un valor entero (analízalo como i32) y un valor de cadena.
Pruébalo tú mismo
mod smart_box;
use smart_box::SmartBox;
fn main() {
// Leer entradas
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: Crear un SmartBox<i32> que contenga el número
// TODO: Crear un SmartBox<String> que contenga el texto
// TODO: Imprimir los valores usando el método get
// Formato: "Value: {value}"
// Los mensajes de Drop aparecerán automáticamente cuando main termine
}
Todas las lecciones de Programación Orientada a Objetos
1Métodos y Comportamiento
Intro a Bloques de ImplementaciónEl Parámetro SelfMétodos MutablesFunciones AsociadasMúltiples Bloques de ImplementaciónEncadenamiento de MétodosResumen - Acciones de Rectángulo4Proyecto: Mascota virtual
Definir la mascotaAlimentar a la mascota7Traits estándar
El trait DebugEl trait DisplayClone y CopyTraits de igualdadResumen - Punto imprimible10Proyecto: Sistema de documentos
El Trait DrawComponente de texto2Encapsulamiento y módulos
Conceptos básicos de módulosLa palabra clave PublicCampos privadosGettersSettersRepaso - Casillero seguro5Genéricos
Estructuras genéricasMétodos genéricosMúltiples tipos genéricosFunciones genéricasResumen - Punto de coordenadas8Traits como límites
Sintaxis de límites de traitsLímites múltiplesLa cláusula whereRetornar tipos con traitsResumen: Impresora genérica11Patrones de diseño en Rust
Patrón NewtypeComposiciónEl Trait DropFrom e IntoResumen - Mock de Smart Pointer3Enums avanzados
Enums con datosMétodos en EnumsCoincidencia de variantes de datosEl Enum Option revisitadoResumen - Enum Shape6Definición de Traits
¿Qué es un Trait?Implementación de TraitsImplementaciones por defectoSobrescribir valores por defectoTraits con parámetrosResumen - Reproductor multimediaPractica por tu cuenta: Compilador de Rust online