traduccion ps4 lenguaje language descargar rust

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: run rustc --explain E0369 para ver una explicación detallada
Nota: una implementación de std::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?