2010-11-29 5 views
5

Est-il possible d'avoir des types récursifs mutuels ([<Struct>]) répartis dans différents fichiers? Les types sont directement sous un espace de noms.Organiser mes types récursifs mutuels

Ma solution est de les mettre dans un gros fichier et d'utiliser la construction type ... and ... and ... etc. Est-ce le seul moyen?

Répondre

13

Vous pouvez utiliser une technique appelée dénouement du nœud récursif où vous paramétrez l'un sur l'autre.

donc ceci:

type a = B of b 
and b = A of a 

devient:

type 'b a = B of 'b 
type b = A of b a 
+0

Merci pour la réponse. Ce genre de technique est-il souvent utilisé? Je pense que les directives de conception F # recommandent de mettre tous dans un gros fichier, non? – Stringer

+0

Je l'utilise certainement souvent et je recommande à nos clients de l'utiliser souvent, mais, oui, il semble être sous-estimé. –

+0

"délier le nœud récursif" est très utile lorsque vous essayez de mémoriser des fonctions. Il a été décrit dans le * Quand nous avons besoin de substitution * de http://typeocaml.com/2015/01/20/mutable/ –

Questions connexes