本地类型是指只能在特定函数中访问的类型
例如,假设我想获取一些数据,对其进行格式化,然后将其序列化为 json。
let parse data = // hypothetical scenario
type Record = { root : string[] }
let record = { root = data }
JsonConvert.SerializeObject record
似乎因为在其他任何地方都不需要该类型,所以这应该可以工作。但是,当我写这个时,我得到了编译错误。
有没有办法在 F# 中获得类似的功能?
最佳答案
F# 不支持函数范围内的类型声明。
最接近这一点的是定义一个模块并将类型保持在模块的本地:
module MyLogic =
type private LocalType = {root: string []}
let serialize data =
let record = {root = data}
JsonConvert.SerializeObject record
如果您将序列化代码放入单独的模块中,那么您可以使用
private
将您的类型保密到模块中。修饰符,这也将使其保持在序列化功能的本地 - 不完全是单个函数,但相当接近。除此之外,我认为您还需要
DataContract
记录上的属性以使其实际工作。
关于types - 是否可以在 F# 中使用本地类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38448502/