Box y tipos recursivos en Rust
Asignación en el heap que le da tamaño conocido a un enum recursivo.
enum List {
Cons(i32, Box<List>),
Nil,
}
fn sum(list: &List) -> i32 {
match list {
List::Cons(v, rest) => v + sum(rest),
List::Nil => 0,
}
}
fn main() {
let list = List::Cons(1, Box::new(List::Cons(2, Box::new(List::Nil))));
println!("{}", sum(&list));
}
Cómo funciona
Box<List>le da un tamaño conocido a la variante recursiva.matchrecorre la lista cons para sumarla.Box::newmueve un valor al heap.
Palabras clave y builtins usados aquí
Boxenumfni32letmatch
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 256
- Tokens
- 106
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 64 segundos.
Paso 1 de 2 en Punteros inteligentes; paso 13 de 15 en Propiedad y préstamos.