【问题标题】:Is it possible to have local types in F#是否可以在 F# 中使用本地类型
【发布时间】:2016-11-21 18:09:28
【问题描述】:

本地类型是指只能在特定函数中访问的类型

例如,假设我想获取一些数据,对其进行格式化,然后将其序列化为 json。

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

似乎因为在其他任何地方都不需要该类型,所以这应该可以工作。但是,当我写这个时,我得到了编译错误。

有没有办法在 F# 中获得类似的功能?

【问题讨论】:

标签: types scope f# functional-programming


【解决方案1】:

F# 不支持函数范围内的类型声明。

最接近这一点的方法是定义一个模块并将类型保持在模块的本地:

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

如果您将序列化代码放入单独的模块中,那么您可以使用 private 修饰符将您的类型保持为模块私有,这也将使其对序列化功能保持本地化 - 不完全是单个函数,但合理关闭。

除此之外,我认为您还需要记录上的DataContract 属性才能使其真正起作用。

【讨论】:

    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多