Почему этот статически типизированный членский доступ считает это геттером?
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