2014-10-07 19 views
2

F#中是否存在一些模拟?类似于C++ - 类似F#函数中的静态变量

let f() = 
    let mutable static a = 0 
    ... 

+0

你需要从函数外部访问这个变量吗?什么是'静态'修饰符? – Petr 2014-10-07 12:24:54

+0

@ Petr No.无外部访问。我知道这不是一种“功能性方式”。一个函数只能调用一次,这就是为什么我感兴趣。 – 2014-10-07 15:08:34

回答

7

如果desugar let f() = ...let f = fun() -> ...,您可以将a的声明放入f的定义内,但在函数开始之前ñ。这将使功能关闭a,同时保留a本地到f。这个问题是你可能无法关闭可变变量,所以你需要使用一个ref:

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

完美。谢谢。 – 2014-10-07 10:44:42

4

最简单的模拟是功能之前,把设:

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是否

+0

比sepp2k的变体稍微复杂一些。谢谢你的帮助。 – 2014-10-07 10:48:24