tag para online metatags keywords generar generador description crear como basicos .net f# functional-programming discriminated-union

.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).