我习惯于对象的成员变量保持它们的值,除非它们被改变。所以 F# 中的以下行为有点令人惊讶:(我有一个有 2 个成员的类,第二个据说是通过调用 gensym 函数在构造函数中初始化的)
let mutable gen_base = 0
let gensym prefix =
gen_base <- gen_base+1;
prefix + gen_base.ToString()
type C(m:int, s:string) =
member this.mm = m;
member this.x = gensym s
override this.ToString() = (this.mm.ToString()) + ", " + (this.x.ToString())
let testC =
let c = new C(1,"a")
printfn "c= %A" (c.ToString())
printfn "c again = %A" (c.ToString())
打印以下内容:
c= "1, a1"
c again = "1, a2"
为什么仅仅因为我检查了它的值而再次调用成员 x 的初始化程序?阻止它这样做的最好方法是什么?使用访问器功能?