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


Is it possible to force a nested function definition to not be a closure?

是否有一个修饰符可以放在一个函数声明上,强制它不成为一个闭包?我希望下面的代码不要在对inner进行这种假定的修改的情况下编译:

1
2
3
4
5
let outer() =
    let i = 7
    let inner() =
        printf"%i" i
    inner()

但是对i的抱怨还没有定义。这样做的原因是安全性——我想确保我不会捕获或者在不捕获的时候修改任何东西,以及闭包与函数的性能。


除了将函数移动到没有范围可捕获的位置之外,没有办法实现这一点。也就是说,在您给出的示例中,有一种简单的方法可以部分实现这一点:

1
2
3
4
5
let outer() =        
    let inner() =
        printf"%i" i
    let i = 7
    inner()