F#中有些模拟?像
这样的东西let f () =
let mutable static a = 0
...
答案 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不是