Articles of rasgos de

Error genérico: parámetro de tipo esperado, estructura encontrada

Comencé un nuevo proyecto, donde quiero ser lo más modular posible, con eso quiero decir que me gustaría poder reemplazar algunas partes con otras en el futuro. Esto parece ser un uso perfecto para los traits , en este momento tengo este código: mod parser; mod renderer; mod renderers; use parser::MarkParser; use renderer::MarkRenderer; struct Rustmark […]

¿Cuándo no debería implementar un rasgo para las referencias a los implementadores de ese rasgo?

Si tengo un rasgo y una función que acepta un tipo genérico restringido a ese tipo, todo funciona bien. Si trato de pasar una referencia a ese tipo, obtengo un error de comstackción. trait Trait { fn hello(&self) -> u32; } struct Struct(u32); impl Trait for Struct { fn hello(&self) -> u32 { self.0 } […]

¿Por qué debería implementar métodos en un rasgo en lugar de como parte del rasgo?

Al tratar de entender mejor el rasgo Any , vi que tiene un bloque impl para el rasgo en sí mismo . No entiendo el propósito de este constructo, o incluso si tiene un nombre específico. Hice un pequeño experimento con un método de rasgo “normal” y un método definido en el bloque impl : […]

Implementé un rasgo para otro rasgo pero no puedo invocar métodos de ambos rasgos

Tengo un rasgo llamado Sleep : pub trait Sleep { fn sleep(&self); } Podría proporcionar una implementación diferente del sleep para cada estructura, pero resulta que la mayoría de las personas duermen de muy pocas maneras. Puedes dormir en una cama: pub trait HasBed { fn sleep_in_bed(&self); fn jump_on_bed(&self); } impl Sleep for HasBed { […]

¿Qué hace que algo sea un “objeto de rasgo”?

Los cambios recientes de Rust han hecho que los “objetos de rasgo” sean más prominentes para mí, pero solo tengo una comprensión nebulosa de lo que realmente convierte a algo en un objeto de rasgo. Un cambio en particular es el próximo cambio para permitir a los objetos de rasgo reenviar las implementaciones de rasgos […]

¿Cómo implemento Agregar rasgo para una referencia a una estructura?

Hice una Estructura Vector dos elementos y quiero sobrecargar el operador + . Hice que todas mis funciones y métodos tomaran referencias, en lugar de valores, y quiero que el operador + funcione de la misma manera. impl Add for Vector { fn add(&self, other: &Vector) -> Vector { Vector { x: self.x + other.x, […]

¿Cómo obtener una referencia de estructura a partir de un rasgo encuadrado?

¿Cómo obtengo Box o &B o &Box de la variable en este código? trait A {} struct B; impl A for B {} fn main() { let mut a: Box = Box::new(B); let b = a as Box; } Este código devuelve un error: non-scalar cast: Box as Box

Error de “parámetro de tipo esperado” en el constructor de una estructura genérica

Estoy tratando de almacenar texturas de pistón en una estructura. struct TextureFactory where R: gfx::Resources { block_textures: Vec<Rc<Texture>>, } impl TextureFactory where R: gfx::Resources { fn new(window: PistonWindow) -> Self { let texture = Rc::new(gfx_texture::Texture::from_path( &mut *window.factory.borrow_mut(), “assets/element_red_square.png”, Flip::None, &TextureSettings::new() ).unwrap()); let block_textures = Vec::new(); block_textures.push(texture); TextureFactory { block_textures: block_textures, } } } Esto no […]

¿Cómo implemento un rasgo que no poseo para un tipo que no soy de mi propiedad?

Quería implementar el rasgo Shl para Vec , el código está debajo. Esto haría posibles cosas como vec << 4 , que sería una buena azúcar para vec.push(4) . use std::ops::Shl; impl Shl for Vec { type Output = Vec; fn shl(&self, elem: &T) -> Vec { self.push(*elem); *self } } fn main() { let […]

¿Cuál es la diferencia entre los self-types y las subclases de rasgos?

Un auto-tipo para un rasgo A : trait B trait A { this: B => } dice que ” A no se puede mezclar en una clase concreta que tampoco se extiende B “ . Por otro lado, lo siguiente: trait B trait A extends B dice que “cualquier clase de mezcla (concreta o abstracta) […]