rust - ps4 - Error al usar operadores con un tipo genérico
rust traduccion (1)
El mensaje de error le dice qué hacer: necesita agregar una implementación de Add
para <T as Mul>::Output
.
Puedes hacerlo agregando un rasgo vinculado a tu impl
como tal:
use std::ops::Mul;
use std::ops::Add;
struct Vec2<T: Copy>
{
x: T,
y: T,
}
impl<T> Vec2<T>
where T: Copy + Mul,
<T as Mul>::Output: Add<Output=T>
{
fn magnitude_squared(&self) -> T {
self.x * self.x + self.y * self.y
}
}
fn main() {
let x = Vec2 { x: 1f32, y: 1f32 };
println!("{}", x.magnitude_squared());
}
La Copy
fue agregada para simplificar esta respuesta.
Esta pregunta ya tiene una respuesta aquí:
Estoy aprendiendo a oxidarme y no puedo entender por qué el siguiente código da un error.
use std::ops::Mul;
use std::ops::Add;
struct Vec2<T>
{
x: T,
y: T,
}
impl<T: Mul + Add> Vec2<T> {
fn magnitude_squared(&self) -> T {
self.x * self.x + self.y * self.y // error here
}
}
fn main() {
let x = Vec2 { x: 1f32, y: 1f32 };
println!("{}", x.magnitude_squared());
}
Mensaje de error (no tiene mucho sentido para mí a menos que la multiplicación de dos flotantes produzca algún tipo ''no aditable''):
src / main.rs (14,9): error E0369: operación binaria
+
no se puede aplicar al tipo<T as std::ops::Mul>::Output
help: runrustc --explain E0369
para ver una explicación detallada
Nota: una implementación destd::ops::Add
puede faltar para<T as std::ops::Mul>::Output
rustc 1.11.0 (9b21dcd6a 2016-08-15)
compilador de rustc 1.11.0 (9b21dcd6a 2016-08-15)
El código es similar a este ejemplo. ¿Cuál es la diferencia que hace que mi código esté equivocado?