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