如何通过引用将对象的属性传递给函数并将其变异?

时间:2018-09-05 13:37:16

标签: f#

如何通过引用将对象的属性传递给函数并将其变异?

这是我想做的事的一个例子:

let mutable myProperty = (uint8) 0
...
member x.MyProperty with get() =  myProperty
                    and  set(v) = myProperty <- v

然后我想通过引用的函数调用来更新该属性:

let update(property:uint8 byref) =
    property <- (uint8) 99

update(&x.MyProperty) // Doesn't compile
  

错误FS3236无法获取从地址返回的值的地址   表达。将返回值分配给让前值   取地址。

我确定此错误是显而易见的。不幸的是,我仍然不确定如何解决它。我确实尝试引用了一些documentation。但是,我仍然被困住。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

可能只有公共领域可以工作:

type MyClass() =
    [<DefaultValue>] val mutable Prop : (uint8)

let myInstance = MyClass()
update &myInstance.Prop

答案 1 :(得分:1)

通过getref和setter进行获取

type X() =
  let mutable p = 0
  member x.P with get() = &p and set(v: int byref) = p <- v

let update (p: int byref) = p <- 99

let x = X()

update &x.P