Sono abbastanza nuovo in F # e voglio modellare le cose nel mondo reale che hanno relazioni "ha-a" piuttosto complesse. Al vertice della gerarchia sono quattro tipi, A - D, con queste relazioni:Modellazione di gerarchie complesse in F #
A
|
+--A
|
+--B
| |
| +--B
| |
| +--D
| |
| +--D
|
+--C
| |
: +--D
| |
| +--D
:
Così tipo B può avere un "genitore" di A o B, e il tipo di D possono avere un genitore di B, C o D.
voglio usare sindacati discriminati per vincolare il genitore di ogni tipo, in modo che non può essere assegnato a non validi i genitori, ad esempio:
type B_Parent = A | B
type D_Parent = B | C | D
allora voglio utilizzare i record per modellare ogni tipo, in cui un campo è il genitore, ad esempio:
type A = { parent:A_Parent; ... }
type B = { parent:B_Parent; ... }
type C = { parent:C_Parent; ... }
type D = { parent:D_Parent; ... }
C_Parent non è un problema perché il suo genitore di tipo A è dichiarato in anticipo. E ho usato 'A option' per A_Parent. Ma non sono stato in grado di capire come definire B_Parent e D_Parent, a causa della loro dipendenza nidificata su se stessi e su altri tipi?
Grazie per la risposta, l'ho implementata e funziona perfettamente. Ma ho un altro problema. – DenisV
A volte devo modificare un record o spostarlo su un altro genitore - operazione facile. Ma poiché i record F # sono immutabili, questo crea un nuovo record, ma mi rimane ancora quello originale in memoria.E non so come sbarazzarmene? – DenisV
Perché hai bisogno di liberartene? Lascia che il netturbino lo pulisca quando non viene più utilizzato. – piaste