Funciones genéricas y bounds en Rust
Un parámetro de tipo con bounds: una función, todos los tipos que satisfacen el trait.
fn biggest<T: PartialOrd + Copy>(values: &[T]) -> T {
let mut best = values[0];
for v in values {
if *v > best {
best = *v;
}
}
best
}
fn describe<T>(value: T) -> String
where
T: std::fmt::Debug + Clone,
{
format!("{:?}", value.clone())
}
fn main() {
println!("{}", biggest(&[3, 9, 2]));
println!("{}", biggest(&[1.5, 0.5]));
println!("{}", describe(vec![1, 2]));
}
Cómo funciona
<T: PartialOrd>dice que T debe ser comparable.- Una cláusula
wheresaca de la firma las listas largas de bounds. - La monomorfización compila una copia por tipo concreto.
Palabras clave y builtins usados aquí
CloneCopyPartialOrdStringfnforifinletmut
El intento, en números
- Líneas
- 22
- Caracteres a escribir
- 367
- Tokens
- 145
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 83 segundos.
Paso 1 de 4 en Genéricos; paso 4 de 19 en Traits y genéricos.