Рекурсивная ссылка на карту в F # - PullRequest
5 голосов
/ 10 ноября 2010

Я пытаюсь создать рекурсивную карту в F #.

type RecMap = Map<string, RecMap>

не будет работать из-за циклической ссылки на RecMap.Но почему ни

type RecMap = Map<string, RecMap ref>

, ни

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

не работает?Я думал, что преобразование типа значения карты в RecMap ref должно было бы сработать.

Обход проблемы путем переписывания RecMap в один тип записи работает,

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

Записи являются ссылочными типами, как ref, но почемуссылки работают в рекурсивных определениях, когда записи делают?

1 Ответ

6 голосов
/ 10 ноября 2010

Ваши первоначальные попытки: сокращения типа , в то время как ваша последняя попытка определяет новый тип. Во время компиляции сокращения стираются путем подстановки. Поскольку у вас есть циклическое определение (даже если оно проходит через дополнительный уровень с включением ref), замена никогда не прекратится.

Я бы, наверное, сделал это вместо:

type RecMap = RecMap of Map<string, RecMap>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...