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

时间:2014-06-03 10:08:52

标签: f#

是否有一个修饰符可以放在一个函数声明中,它会强制它不是一个闭包?我希望以下内容不要使用inner

的假设修改进行编译
let outer() =
    let i = 7
    let inner() =
        printf "%i" i
    inner()

但抱怨i没有定义。这样做的原因是安全性 - 我希望确保我不会捕捉并且可能在我不打算做任何事情时,以及闭包与功能的表现。

1 个答案:

答案 0 :(得分:3)

除了将功能移动到无法捕获范围的位置之外,无法实现此目的。话虽如此,在你给出的例子中有一个简单的方法可以部分实现这个目的:

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