ruby oop inheritance interface implementation

¿Cómo encontrar métodos "esenciales" para proporcionar una interfaz de mezclas de Ruby?



oop inheritance (2)

Pienso en la palabra "contrato" . El contrato de Enumerable, por ejemplo, es "dame #each y te daré estos métodos elegantes".

Lo horrible del título de la pregunta es lo que intento resolver. Ejemplo:

en Ruby, Enumerable es una interfaz en el sentido de que puedo implementar algo y documentarlo como:

def myfancymethod(please_pass_me_an_Enumerable_here)

pero, por otro lado, Enumerable es una especie de amplificación de la interfaz que tiene # cada uno como uno de sus métodos. Si tengo una clase

class Foo def each :bar end end

Para aquellos que no están familiarizados con Ruby, si mezclas el módulo Enumerable en una clase, obtienes docenas de métodos que solo se basan en #each método para proporcionar cosas como #map , #select , etc.

Podría decir que mi clase Foo es compatible con Enumerable o Enumerable o qué? ¿Qué términos describen una respuesta a "¿Qué se necesita para ser un Enumerable?", "Bueno, tienes que tener #each"

Del mismo modo, en Ruby

(Array.new.methods - Object.new.methods).size # 111

¿Eso significa que para falsificar una interfaz de Array, tengo que implementar 111 métodos? De ninguna manera, pero cómo averiguar qué métodos son la "esencia" de Array. ¿es solo #[] , #[]= y #size ? ¿Cómo darle sentido?


Es posible que le interese esta solicitud de función , que sugiere algunas mejoras en la arquitectura de la clase Hash ampliamente utilizada.

La triste verdad es olvidarse de eso . En este punto, Ruby no tiene nada como esto. Enumerable y Comparable son lo más parecido posible y su "contrato" es simplemente una cuestión de documentación.

Por cierto, creo que #size es el otro método que puede usar Enumerable , aunque es opcional.