ps4 - rust traduccion
¿Hay alguna otra manera además de los rasgos para extender las estructuras? (2)
Estoy tratando de extender la estructura Grid
de la biblioteca de pistón-2dgraphics. No hay un método para obtener la ubicación en la ventana de una celda en particular, así que implementé un rasgo para calcular eso para mí. Luego, quería un método para calcular los vecinos de una celda particular en la grilla, así que implementé otro rasgo.
Algo sobre esto es feo y se siente innecesario ya que probablemente nunca use estos rasgos para otra cosa que no sea esta estructura de grilla específica. Entonces, ¿hay otra manera en Rust de extender una estructura sin tener que implementar rasgos cada vez?
A partir de Rust 1.3, no, no hay otra manera.
No es posible definir métodos inherentes en un tipo definido en otra caja. Sin embargo, como ya sabe, puede definir su propio rasgo con los métodos que necesita, y luego implementar ese rasgo para un tipo externo. Este patrón se conoce como rasgos de extensión . El nombre de los rasgos de extensión, por convención, finaliza con Ext
, para indicar que este rasgo no debe usarse como un objeto genérico o como un objeto de rasgo. Hay algunos ejemplos en la biblioteca estándar.
Otras bibliotecas también pueden exportar rasgos de extensión (ejemplo: byteorder ). Sin embargo, como para cualquier otro rasgo, debe traer los métodos del rasgo dentro del alcance con el use SomethingExt;
.
No. Actualmente, la única forma de escribir nuevos métodos para un tipo que se ha definido en otra caja es a través de rasgos. Sin embargo, esto parece demasiado engorroso ya que tiene que escribir tanto la definición de rasgo como la implementación.
En mi opinión, el camino a seguir es utilizar funciones gratuitas en lugar de métodos. Esto al menos evitaría la duplicación causada por los rasgos.