2010-11-10 15 views
5

Estoy intentando crear un mapa recursivo en F #.Referencia de mapa recursivo en F #

type RecMap = Map<string, RecMap>

no funcionará, debido a la referencia cíclico a RecMap. Pero ¿por qué es que ni

type RecMap = Map<string, RecMap ref>

ni

type RecMap = (Map<string, RecMap>) ref

obras? Pensé que hacer el tipo de valor del mapa en un RecMap ref debería haber hecho el truco.

Sortear el problema volviendo a escribir RecMap en unas obras de tipo de registro de un miembro,

type RecMap = { r : Map<string, RecMap> }

Los registros son los tipos de referencia al igual que ref, pero ¿por qué el trabajo no árbitros de las definiciones recursivas, cuando los registros hacen?

Respuesta

6

Sus intentos iniciales son type abbreviations, mientras que su último intento define un nuevo tipo. Durante la compilación, las abreviaturas se borran a través de la sustitución. Dado que tiene una definición cíclica (incluso si pasa a través de un nivel adicional con la inclusión de ref), la sustitución nunca terminaría.

probablemente haría esto en su lugar:

type RecMap = RecMap of Map<string, RecMap> 
+0

Aka, abreviatura de tipo - http://msdn.microsoft.com/en-us/library/dd233246.aspx –

+0

@Tony - gracias, I' he actualizado mi respuesta para ser más preciso. – kvb

Cuestiones relacionadas