При разработке приложения F # у меня есть тип, который содержит свойство типа Lazy<'T>
.
По-видимому, один интересный побочный эффект (простите за каламбур) способа, которым F # обрабатывает синтаксический сахар свойств (в отличие от пути C #), заключается в том, что метод получения и установки свойства может возвращать / принимать различные типов. (По крайней мере, Visual Studio не жалуется, так как я пишу код, который использует это наблюдение.)
Например, мне выгодно сделать это:
let lazyValue = lazy 0
member this.Value
with get () =
lazyValue.Value
and set _lazyVal =
lazyValue <- _lazyVal
... такой, что Value возвращает int
, но принимает только Lazy<int>
.
Что меня интересует, так это теоретические, идиоматические и практические возражения против таких действий. Это что-то, из-за чего сноб F # мог бы поднять нос? Есть ли какое-то практическое правило программирования, которое эта (объектно-ориентированная реализация) явно нарушает? Это подход, который был продемонстрирован, чтобы вызвать проблемы в крупномасштабных приложениях? Если да, то почему / как?