有没有办法在F#中使用可变函数参数,这样可以允许像
这样的东西let mutable i = 9
let somefun n = n <- 12; ()
somefun i
(* *not* a real-world example *)
我知道可以通过将其包装到记录类型
来实现type SomeRec = { mutable i: int }
let ri = { i = 9 }
let someotherfun r = r.i <- 12; ()
并且可以以类似的方式为类成员完成。然而,即使在浏览了整个F#语言规范之后(是的,我做了!),似乎没有语法允许第一种情况,并且编译器似乎对我尝试这一点非常不满意。我希望会有某种类型的注释,但是不可能在这种情况下使用。
我也知道我不应该首先做这种事情,但第一种情况(int
绑定)和第二种情况(record
类型)在语义上是相同的,任何这种反对意见同样适用于两种情况。
所以我认为我在这里遗漏了一些东西。
答案 0 :(得分:15)
您可以使用ref作为参数
let v = ref 0
let mutate r =
r := 100
mutate v
printfn "%d" !v
或byref关键字
let mutable v = 0
let mutate (r : byref<_>) =
r <- 100
mutate &v
printfn "%d" v
答案 1 :(得分:9)
使用等于C#byref
的{{1}}关键字。
请参阅http://msdn.microsoft.com/en-us/library/dd233213.aspx