Cow: presta hasta que debas poseer en Rust
Clone-on-write devuelve un préstamo si nada cambió y un valor propio cuando sí.
use std::borrow::Cow;
fn normalize(input: &str) -> Cow<str> {
if input.contains(' ') {
Cow::Owned(input.replace(' ', "_"))
} else {
Cow::Borrowed(input)
}
}
fn main() {
for raw in ["already_clean", "needs a change"] {
let out = normalize(raw);
let owned = matches!(out, Cow::Owned(_));
println!("{out} (allocated: {owned})");
}
println!("{}", normalize("plain").len());
}
Cómo funciona
Cow::Borrowedno cuesta nada;Cow::Ownedasigna memoria.- Quien llama trata ambos igual a través del deref.
- Encaja en funciones normalizadoras que casi nunca cambian nada.
Palabras clave y builtins usados aquí
elsefnforifinletstruse
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 373
- Tokens
- 123
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 70 segundos.
Paso 1 de 2 en Prestar sin copiar; paso 5 de 11 en Lifetimes y mutabilidad interior.