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