Почему этот статически типизированный членский доступ считает это геттером?

сеттер - добытчик

rvm это объект, а не функция.

Почему ограничение (^b:(member ReportSubTitle:(String -> unit)) rvm ) придумать как получатель вместо установщика? Это всплывающая подсказка или что-то еще?

Везде, где я использовал дженерики со статической типизацией, я обнаружил, что мне даже не нужно указывать тип. Это тоже не работает:

// Setup the sub title with the total
let subTitleSetter = (^b:(member ReportSubTitle:_) rvm ) 
subTitleSetter ("Total: " + total.ToString("C") )

Перенес эту попытку в функцию и попробовал то, что предложил @kvb

без паренов

Это единственное использование rvm в рамках объема / метода

1 ответ

Решение

Я не совсем уверен, как правильно вызывать сеттеры через статические ограничения членов. Я всегда нахожу функцию немного грубой по краям и предпочитаю использовать другие варианты, когда это возможно (т.е. определить интерфейс и получить доступ к членам через интерфейс).

Тем не менее, похоже, что вы можете использовать set_PropertyName в ограничении. Следующий небольшой пример отлично работает для меня:

type A() = 
  member val Foo = 0 with get, set

let a = A()
let setter v = (^b:(member set_Foo : int -> unit) (a, v) )

setter 42
a.Foo
Другие вопросы по тегам