Existe esta dicotomía en la forma en que podemos crear clases en f # que realmente me molesta. Puedo crear clases utilizando un formato implícito o uno explícito. Pero algunas de las características que deseo solo están disponibles para su uso con el formato implícito y algunas solo están disponibles para su uso con el formato explícito.Con respecto a la programación orientada a objetos F #
Por ejemplo:
no puedo usar
let inline
* (olet
solo) dentro de una clase definida de forma explícita.La única manera (que yo sepa) para definir inmutables públicas campos (*) no propiedades dentro de una clase definida implícitamente es la sintaxis
val bla : bla
.Pero hay una redundancia aquí. Dado que terminaré con dos copias de los mismos datos inmutables, uno privado, uno público (porque en el modo implícito los parámetros del constructor persisten durante toda la existencia de la clase)
(No es tan relevante) La necesidad de usar atributos para la sobrecarga de métodos y para los valores predeterminados del campo es bastante desalentador.
¿Hay alguna manera de solucionar este problema?
* Por razones de rendimiento
EDIT: Resulta que estoy equivocado acerca de los dos puntos (Gracias Ganesh Sittampalam & MichaelGG).
Aunque no puedo usar
let inline
tanto en & definición de clase explícita implícita, puedo usarmember inline
muy bien, que yo supongo que hace lo mismo.Al parecer, con el último F # ya no hay redundancia, ya que los parámetros no utilizados en el cuerpo de la clase son locales para el constructor.
Will be gone en la siguiente versión de F #.
"Por razones de rendimiento"? No puedo decir que me gusta el sonido de eso;) – Juliet
Se trata principalmente de números crujidos relacionados con la programación de gráficos. Vea aquí: http://blogs.msdn.com/ricom/archive/2006/09/07/745085.aspx. –
Su pregunta no da una pista del problema que está tratando de resolver. Supongo que quiere emular la Programación Orientada a Objetos del estilo C++ en F #. (¡Corrígeme si no lo eres!). Pero, ¿por qué necesita esto en un lenguaje funcional? Supongo que esto es particular del problema en el que está trabajando y podría ser interesante si realiza una publicación detallada al respecto aquí. –