Può discriminare i sindacati si riferiscono l'un l'altro?
-
27-09-2020 - |
Domanda
Sto costruendo un albero di espressione usando sindacati discriminati.Il codice qui sotto:
type IntExpression =
| TrueIsOne of BoolExpression
type BoolExpression =
| LessThan of IntExpression * IntExpression
| And of BoolExpression * BoolExpression
| Or of BoolExpression * BoolExpression
| Bool of bool
.
getta un errore perché il boolexpressione non è definito.Scambiare le definizioni Solo risultati nel contrario (l'intexpressione non è definita) come ci si aspetterebbe.
C'è un modo intorno a questo?
Soluzione
Sì, utilizzare and
in Tipo di gruppo Definizioni con inter-dipendenze:
type IntExpression =
| TrueIsOne of BoolExpression
and BoolExpression =
| LessThan of IntExpression * IntExpression
| And of BoolExpression * BoolExpression
| Or of BoolExpression * BoolExpression
| Bool of bool
. Altri suggerimenti
"E" funziona generalmente per i tipi con dipendenze reciproche.Cioè, funziona per tutti i tipi, come i sindacati discriminati, come mostrato da Mau, classi, record e funzioni reciprocamente ricorsive.
Esempio di non terminazione:
let rec foo x = bar x
and bar x = foo x
. Forse questo funzionerà:
type IntExpression =
...
and BoolExpression =
...
.
(Informazioni prese da Questa pagina su msdn .) .
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow