C ++ - 类似F#函数中的静态变量

时间:2014-10-07 09:49:12

标签: f# closures mutable ref

F#中有些模拟?像

这样的东西
let f () =
   let mutable static a = 0
   ...

2 个答案:

答案 0 :(得分:8)

如果您将let f () = ...设为let f = fun () -> ...,则可以将a的声明置于f的定义之内,但在函数开头之前。这将使函数靠近a,同时将a保持为f本地。这个问题是您可能无法关闭可变变量,因此您需要使用ref:

let f =
    let a = ref 0
    fun () ->
        ....

答案 1 :(得分:4)

最简单的模拟是将let放在函数前面:

let mutable static a = 0
let f () =

如果您真的想要隐藏变量,可以将整个事物包含在父模块中。

否则,序列表达式允许记住函数中的变量,但这是一个非常重要的变化。

其他一些想法 - 隐藏在课堂内:

type t() = 
    static let mutable t =  1
    static member f() = 1

或模块

module  t = 
    let mutable private t =  1
    let f() = 1

在模块方法中,f是可见的,但t不是