f# - 是否可以强制嵌套函数定义不是闭包?

标签 f#

是否有修饰符可以放在函数声明上以强制它不是闭包?我希望以下内容不要通过对 inner 的这种假定修改进行编译:

let outer() =
    let i = 7
    let inner() =
        printf "%i" i
    inner()

但是提示i没有定义。这样做的原因是安全性——我想确保我没有捕获并可能修改任何我不打算捕获的东西,以及闭包与函数的性能。

最佳答案

除了将函数移动到范围内没有任何内容可捕获的位置之外,没有其他方法可以实现此目的。话虽如此,在您给出的示例中,有一种简单的方法可以部分实现这一点:

let outer() =        
    let inner() =
        printf "%i" i
    let i = 7
    inner()

关于f# - 是否可以强制嵌套函数定义不是闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24012435/

相关文章:

.net - Rx 订阅和垃圾收集

f# - FSharp 和向上转换到接口(interface)似乎是多余的

types - 如何在 F# 中自动执行 map 查找链?

f# 允许 cors web api

f# - 在 F# 中创建类型的不可比较版本

f# - 可变状态和观察者模式

c++ - F# 代码优化还是真的那么慢?

f# - 获取字符串列表形式的记录类型标签

syntax - F# 语法糖

json - 带有 Json over Http 的 ServiceStack/Redis 返回字符串而不是 Json