我有一个类,其中的属性在调用其setter时会触发多个副作用,例如触发更改事件和/或渲染操作。如果只有当属性的值需要更改时才设置该属性,我该如何设计函数?
使用refs,我只需执行以下操作:
let setIfChanged (oldVal: Ref<'T>) (newVal: 'T) = if newVal <> !oldVal then oldVal := newVal
let y = ref 0
setIfChanged y 1
然而,可变属性不是引用(refs),我似乎找不到任何设计这种编译的方法。例如,
let setIfChanged oldVal newVal = if newVal <> oldVal then oldVal <- newVal
只会告诉我 oldVal 不可变。
有没有一种方法可以注释 oldVal,使其为可变(可设置)属性?或者有更好的方法吗?