Types 在F中可以有本地类型吗#
我所说的局部类型是指只能在特定函数中访问的类型 例如,假设我想要获取一些数据,格式化它,并将其序列化为jsonTypes 在F中可以有本地类型吗#,types,scope,f#,functional-programming,Types,Scope,F#,Functional Programming,我所说的局部类型是指只能在特定函数中访问的类型 例如,假设我想要获取一些数据,格式化它,并将其序列化为json let parse data = // hypothetical scenario type Record = { root : string[] } let record = { root = data } JsonConvert.SerializeObject record 似乎因为其他地方不需要该类型,所以应该可以使用。然而,当我写这篇文章时,我会遇到编
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
属性才能使其实际工作similar@JohnPalmer这些不是匿名的吗?当你使用这个时,你会不会失去一些多态性的功能?你可以使用private
access修饰符,这样你的类型只能从封闭的模块中访问。