Quiero crear una clase genérica, cuyo constructor no devolvería una instancia de esta clase genérica, sino una instancia de una clase secundaria dedicada.Cómo hacer que Moose devuelva una instancia de clase infantil en lugar de su propia clase, para polimorfismo
Como Moose crea objetos automáticamente, no entiendo si esto es posible y cómo crear una clase Moose con la sintaxis de Moose y tener este comportamiento.
por ejemplo: el usuario pide: $file = Repository->new(uri=>'sftp://blabla')
.... y se devuelve un repositorio `:: _ ejemplo Sftp``
usuario utilizaría $file
como si se trata de una instancia del repositorio, sin la necesidad de conocer la verdadera subclase (polimorfismo)
Nota:
a lo solicitado, tal vez debería haber sido más claro acerca de lo que estaba tratando de lograr:
El propósito de mi clase es ser capaz de añadir nuevos esquemas de repositorio (por ejemplo, durante sftp), simplemente creando una clase Repository :: _ Stfp "oculta" y agregando un caso en el constructor Repository para fabricar el objeto especializado correcto dependiendo de url. El repositorio sería como una clase base virtual, proporcionando una interfaz que los objetos especializados implementarían.
Todo esto es para agregar nuevos esquemas de repositorio sin tener que modificar el resto del programa: trataría sin saberlo la instancia especializada como si fuera una instancia de Repositorio.
mmh ... déjenme entender esta función, volviendo a los documentos de Moose ... También, mi primer pensamiento al respecto, ya que acabo de comenzar con Moose , es si todavía es mejor hacer Moose malo que no Moose –
@alex: si sigues los ejemplos en Moose :: Manual :: *, puedes usar la mayoría de las características de Moose sin tener problemas. Es solo cuando comienzas a usar 'meta' que las cosas se vuelven locas :) – Ether
bien, entendido, pero tengo curiosidad acerca de las diferencias sutiles: a) Un 'Repositorio' de clase base Moose con todos los atributos básicos; Repositorio de clases especializadas de Moose :: _ Sftp 'que "extiende"/hereda la clase base; Un alce (o no) fábrica 'RepositoryBuilder', con un método para crearme una instancia de la clase especializada, que puede ser agnósticamente manipulado como un 'Repositorio'. b) Lo mismo que a), pero con un rol en lugar de la clase base <- que es lo que usted propuso, ¿verdad? c) yd) MooseX :: AbstractFactory o MooseX :: ABC, pero estos no están disponibles por defecto (tomo centos5 para ref) –