Как передать свойство объекта по ссылке в функцию и изменить его? - PullRequest
0 голосов
/ 05 сентября 2018

Как передать свойство объекта по ссылке в функцию и изменить его?

Вот пример того, что я хотел бы сделать:

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 Невозможно получить адрес значения, возвращенного из выражение. Присвойте возвращаемое значение привязанному значению до взяв адрес.

Я уверен, что эта ошибка очевидна. К сожалению, я все еще не уверен, как решить это. Я пытался ссылаться на некоторую документацию 1014 *. Тем не менее, я все еще застрял.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Сделать геттер и сеттер byref

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
0 голосов
/ 05 сентября 2018

Возможно, будут работать только открытые поля:

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

let myInstance = MyClass()
update &myInstance.Prop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...