本地类型我指的是只能在特定函数中访问的类型
例如,假设我想获取一些数据,格式化它,并将其序列化为json。
let parse data = // hypothetical scenario
type Record = { root : string[] }
let record = { root = data }
JsonConvert.SerializeObject record
似乎因为在任何其他地方都不需要这种类型。但是当我写这篇文章时,我得到了编译错误。
有没有办法在F#中获得类似的功能?
答案 0 :(得分:5)
F#不支持函数范围内的类型声明。
最接近你的是定义一个模块并保持模块的本地类型:
module MyLogic =
type private LocalType = {root: string []}
let serialize data =
let record = {root = data}
JsonConvert.SerializeObject record
如果您将序列化代码放入一个单独的模块中,那么您可以使用private
修饰符将您的类型保密为模块,这也将它保持在序列化功能的本地 - 而不是单个函数,但是相当接近。
除此之外,我认为您还需要记录上的DataContract
属性才能使其真正有效。