Saltar al contenido

Lectura de código real

Una transferencia en la biblioteca estándar

Este fragmento procede de core::mem::take; se omiten atributos de documentación y estabilidad:

Rust
pub fn take<T: Default>(dest: &mut T) -> T {    replace(dest, T::default())}

Lee la entrada y la salida: recibe acceso mutable a un lugar, instala allí un valor por defecto y devuelve el valor anterior por propiedad. Default es el contrato necesario para construir el reemplazo.

take no necesita que T implemente Clone. Tampoco deja el lugar vacío o sin inicializar. La operación sirve cuando tienes que sacar un valor y mantener válido el contenedor.

Fuente: código de Rust 1.85.0, core/mem/mod.rs. Fragmento inspeccionado, no ejecutado.

¿Por qué take no necesita Clone?