¿Cómo puedo satisfacer el requisito del rasgo `Sum` para f32?
Tengo el siguiente rasgo que estoy tratando de implementar:
pub trait CentralMoment<output =="" f32="">
where
Output: Copy,
{
fn mean(&self) -> Output;
}
impl<t> CentralMoment for [T] {
fn mean(&self) -> f32 {
let sum: f32 = self.iter().sum();
sum / self.len() as f32
}
}
Mi problema está en la línea let sum: f32 = self.iter().sum()
. El compilador me está diciendo:
the trait bound f32: Sum<&T>
is not satisfied
–> src/lib.rs:45:36
|
45 | let sum: f32 = self.iter().sum();
| ^^^ the trait Sum<&T>
is not implemented for f32
|
help: consider extending the where
bound, but there might be an alternative better way to express this requirement
|
42 | T: Copy, f32: Sum<&T>
pero incluso cuando intento incluir f32: Sum<&T>
, sigo obteniendo el mismo error.
¿Qué estoy haciendo mal aquí y cómo puedo resolver este problema? Gracias de antemano, y por favor avíseme si necesita alguna aclaración adicional.
davy.ai
El problema aquí es que el rasgo
Sum
no está implementado para&T
, dondeT
es el tipo de elementos en la rebanada.Para resolver este problema, puedes usar una función
map
para convertir cada elemento en la rebanada af32
antes de sumarlos.Aquí tienes una implementación actualizada:
En esta implementación actualizada, agregamos un nuevo límite
f32: Sum
para asegurarnos de que el rasgoSum
esté implementado paraf32
. También usamos la funciónmap
para convertir cada elemento en la rebanada af32
antes de sumarlos.Con estos cambios, la implementación debería compilar sin errores.