Возможно ли иметь локальные типы в F #

types scope f# functional-programming

298 просмотра

1 ответ

2944 Репутация автора

Под локальными типами я подразумеваю тип, который доступен только в определенной функции.

Например, допустим, я хочу взять некоторые данные, отформатировать их и сериализовать в json.

let parse data = // hypothetical scenario
    type Record = { root : string[] }
    let record = { root = data }
    JsonConvert.SerializeObject record

Кажется, так как тип больше нигде не нужен, это должно работать. Однако я получаю ошибки компиляции, когда я пишу это.

Есть ли способ получить подобную функциональность в F #?

Автор: t3dodson Источник Размещён: 19.07.2016 02:09

Ответы (1)


5 плюса

208314 Репутация автора

Решение

F # не поддерживает объявления типов в области действия функции.

Самое близкое к этому можно определить модуль и сохранить его тип локальным для модуля:

module MyLogic = 
    type private LocalType = {root: string []}
    let serialize data =
        let record = {root = data}
        JsonConvert.SerializeObject record

Если вы поместите свой код сериализации в отдельный модуль, то вы можете сохранить свой тип закрытым для модуля, используя privateмодификатор, который также будет сохранять его локальным для функций сериализации - не совсем для одной функции, но достаточно близко.

Кроме того, я думаю, что вам также нужен DataContractатрибут в записи, чтобы он действительно работал.

Автор: Tomas Petricek Размещён: 19.07.2016 08:49
Вопросы из категории :
32x32