.net - para - tag basicos
Uso de la palabra clave y en F#en uniones discriminadas (2)
Me enfrenté hoy con las siguientes declaraciones de DUs:
type Grammar = Definition list
and Definition = Def of string * Expression
and Range =
| Char of char
| Range of char * char
¿Por qué uno usaría la palabra clave and
lugar de type
aquí?
El and
es necesario para que las definiciones de Grammar
y Definition
compilen correctamente. El tipo de Grammar
se lista primero, pero depende del tipo de Definition
que se define más adelante. Para compilar correctamente, debe estar vinculado and
que le dice al compilador de F # que las definiciones de tipo son dependientes / relacionadas.
No hay razón para que el Range
se declare de tal manera y se debe declarar con el type
Se utiliza para crear tipos mutuamente relacionados. Por lo general, en F #, debe declarar por adelantado cada tipo antes de usarlo, pero esto no siempre es posible, por ejemplo, cuando necesita introducir una dependencia cíclica en dos o más tipos.
En su ejemplo, si definiera Definition
con type
lugar de and
, no podría compilar la definición de Grammar
, a menos que cambiara el orden en que se definieron.
El ejemplo de código que has publicado no es exactamente bueno, porque no es necesaria la relación mutua, puedes cambiar el orden. (A menos que hubiera algunos tipos más definidos más abajo que dependían de lo anterior).