Transferencia: práctica en Rust
Del modelo al código que compila
Esta práctica combina propiedad y acceso a un contenedor. Implementa cantidad<T>(&[T]) y entregar<T>(&mut Vec<T>) para observar un buffer y transferir sus elementos originales.
Preparación para leer las firmas
Antes de resolver, comprueba que puedes seguir estos contratos. Si necesitas reforzarlos, consulta los fragmentos indicados; no hace falta terminar todos los capítulos.
- Parámetro de tipo: en funciones genéricas, lee «Un parámetro de tipo: fn max». Debes reconocer que
Trepresenta el tipo de los elementos. Las firmas de esta práctica no pidenClone,CopyniDefaultaT; no añadas esas restricciones para resolverla. - Vista de elementos: en slices, consulta «Una ventana a una porción contigua» y «Un slice desacopla la función del contenedor». Debes distinguir el dueño de una vista
&[T]y reconocer que su longitud cuenta elementos.cantidadrecibe esa vista sin consumir el contenedor. - Acceso para modificar: en referencias mutables, consulta «Modificar a través de una referencia» y «Una sola mutable a la vez». Debes reconocer que
&mut Vec<T>presta acceso exclusivo al vector: el llamador conserva el contenedor y debe poder reutilizarlo después.
En este contrato, Vec<T> contiene una secuencia de elementos de tipo T; una secuencia vacía también es válida. Al entregar, los valores anteriores pasan al llamador y el vector de entrada queda vacío. El contrato no exige conservar la reserva ni una capacidad concreta.
Si necesitas entender cómo extraer el contenido dejando un valor válido, vuelve a la lectura de mem::take y al caso del buffer, ya disponibles en este tema. Distingue el reemplazo válido del contenedor de una exigencia de Default a sus elementos.
Estas remisiones orientan la preparación; no son requisitos automáticos de avance ni acreditan comprensión al visitarlas.
Practica y comprueba el contrato
Abre el ejercicio en la app de Mac. El código inicial compila, pero los tests fallan. Trabaja en tres pasos:
- Observa la longitud mediante préstamo, sin consumir el buffer.
- Entrega los valores en su orden original y deja el buffer vacío.
- Reutiliza el buffer y comprueba que cada recurso se destruye una sola vez.
Los elementos de prueba no implementan Clone ni Copy. No puedes solucionar la transferencia clonándolos ni añadiendo esos requisitos a la firma. Puedes usar la biblioteca estándar y no necesitas unsafe.
Primero ejecuta los tests locales; después solicita la evaluación. El verificador envía operaciones y compara tus salidas. Este momento exige un resultado aprobado firmado y guardado en tu cuenta: leerlo, aprobar otra pregunta o pasar solo los tests locales no lo completa.
Al regresar, pulsa Actualizar progreso si el resultado todavía no aparece. Los resultados web anteriores se conservan, pero no sustituyen esta práctica nueva.
Este momento se completa con una evaluación aprobada en la app de wandres. Los tests locales no lo completan.
Practicar en la app