¿Cuál es la forma convencional de crear una interfaz en OCaml? Es posible tener una interfaz con una única implementación creando un archivo de interfaz foo.mli
y un archivo de implementación foo.ml
, pero ¿cómo se pueden crear múltiples implementaciones para la misma interfaz?Interfaz con varias implementaciones en OCaml
Respuesta
Si va a tener varias implementaciones para la misma firma, defina su firma dentro de una unidad de compilación, en lugar de como una unidad de compilación, y (si es necesario) de manera similar para los módulos. Hay un ejemplo de ello en la biblioteca estándar: la firma OrderedType
, que describe los módulos con un tipo y una función de comparación de ese tipo:
module type OrderedType = sig
type t
val compare : t -> t -> int
end
Esta firma se define en tanto set.mli
y map.mli
(se puede hacer referencia a ella como Set.OrderedType
o Map.OrderedType
, o incluso puede escribirlo usted mismo: las firmas son estructurales). Hay varias unidades de compilación en la biblioteca estándar que tienen esta firma (String
, Nativeint
, etc.). También puede definir su propio módulo, y no necesita hacer nada especial al definir el módulo: siempre que tenga un tipo llamado t
y un valor llamado compare
del tipo t -> t -> int
, el módulo tiene esa firma. Hay un ejemplo ligeramente elaborado de eso en la biblioteca estándar: el functor Set.Make
construye un módulo que tiene la firma OrderedType
, por lo que puede construir conjuntos de conjuntos de esa manera.
(* All four modules passed as arguments to Set.Make have the signature Set.OrderedType *)
module IntSet = Set.Make(module type t = int val compare = Pervasives.compare end)
module StringSet = Set.Make(String)
module StringSetSet = Set.Make(StringSet)
module IntSetSet = Set.Make(IntSet)
Debe usar módulos y firmas. Un archivo .ml
define implícitamente un módulo y un .mli
es su firma. Con módulos explícitos y firma, puede aplicar una firma a varios módulos diferentes.
Consulte this chapter del libro en línea "Desarrollo de aplicaciones con OCaml".
- 1. Unidad probando varias implementaciones del mismo rasgo/interfaz
- 2. Manejo de varias implementaciones de un Spring Bean/interfaz
- 3. TinyIoC - Implementaciones Múltiples de la Interfaz
- 4. Creación de una interfaz e implementaciones intercambiables en python
- 5. ServiceLoader encontrar implementaciones de una interfaz
- 6. Acceso directo para crear implementaciones de interfaz en NetBeans
- 7. ¿Cuál es un buen patrón para almacenar implementaciones de una interfaz y recuperar implementaciones específicas?
- 8. Functors con múltiples argumentos en OCaml
- 9. Implementaciones simuladas en C++
- 10. Usar funtores como interfaces en OCaml
- 11. Múltiples implementaciones en maven
- 12. ¿Cómo cambio el archivo FederationMetadata.xml de WCF para varias implementaciones?
- 13. Uso de JMockit para simular implementaciones de interfaz autocableadas
- 14. Resultados inesperados con OCaml! =
- 15. Inyección de dependencia con la interfaz implementada por varias clases
- 16. ¿Puedo construir una interfaz gráfica desde ocaml hasta myplex?
- 17. OCaml tipos con diferentes niveles de especificidad
- 18. Diferentes paquetes de osgi con implementaciones de la misma interfaz: ¿dónde ubicar esa inferface?
- 19. ¿podemos tener main() en una interfaz y diferentes implementaciones para main() en las clases que implementan esta interfaz?
- 20. OCaml en la pila empresarial
- 21. Parámetros con nombre de Ocaml
- 22. {X} con el valor en ocaml
- 23. módulos ocaml aplicación
- 24. Structuremap: implementaciones de múltiples interfaces
- 25. Usando la interfaz genérica varias veces en la misma clase
- 26. Uso de enumeraciones como contenedor de implementaciones
- 27. Problemas con interfaz de flujo en C++
- 28. ¿Cómo puedo obtener una lista de todas las implementaciones de una interfaz mediante programación en Java?
- 29. ¿Implementaciones compatibles con IEEE754 (r) para Java?
- 30. la inyección de un Enumerable que contiene todas las implementaciones registradas de una interfaz
Muchas gracias por el enlace del libro. Fue muy útil en más de un sentido. –