【发布时间】:2015-04-09 09:43:43
【问题描述】:
F# 有没有办法更新类中的不可变绑定?或者,更具体地说,有没有办法复制类定义并更改单个不可变条目?比如在OCaml中,我们可以写出这样的代码
let foo = object
val fuz = 1
method get_fuz = fuz
method inc_fuz = {< fuz = fuz+1 >}
end
let _ = foo#get_fuz
let foo = foo#inc_fuz
let _ = foo#get_fuz
这个程序产生
val foo : < get_fuz : int; inc_fuz : 'a > as 'a = <obj>
- : int = 1
val foo : < get_fuz : int; inc_fuz : 'a > as 'a = <obj>
- : int = 2
基本上,语法{< >} 允许我们在某种意义上更新不可变属性,方法是创建一个新对象,其中除了指定的条目已更改之外,所有相同的条目都已更改。 F#中有类似的操作吗?
【问题讨论】:
-
这里有 复制和更新记录表达式,我想这与记录类似,请参阅here 了解更多信息。