types - 是否可以在 F# 中使用本地类型

标签 types scope f# functional-programming

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

例如,假设我想获取一些数据,对其进行格式化,然后将其序列化为 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/

相关文章:

types - rust :预期类型,发现不透明类型

postgresql - 将 varchar 列转换为 smallint 时数据发生变化

c - 在同一个函数中,通过间接访问访问不在范围内的局部变量是否是 UB?

jsf - 如何选择合适的bean作用域?

.net - 不能将 try/与序列表达式内的 block 一起使用。如何绕过它?

scala - 抽象案例类的模式匹配

variables - 如何在 Lua 中声明一个变量而不将其初始化为 nil?

F#:实现函数名与关键字begin相同的接口(interface)

f# - 为递归函数的性能分析 F#

dynamic - 在 Kotlin 中如何声明可以是字符串或函数的函数参数?