F#属性与C#属性

Mil*_*oDC 5 c# f# properties

在开发F#应用程序时,我有一个包含类型属性的类型Lazy<'T>.

显然,F#处理属性的语法糖(与C#方式相反)的方式的一个有趣的副作用(原谅双关语)是属性的getter和setter可能返回/接受不同的类型.(至少,当我编写利用这种观察的代码时,Visual Studio并没有抱怨.)

例如,我这样做是有利的:

let lazyValue = lazy 0

member this.Value
    with get () =
        lazyValue.Value
    and set _lazyVal =
        lazyValue <- _lazyVal
Run Code Online (Sandbox Code Playgroud)

...这样Value 返回一个int,但只接受一个Lazy<int>.

我所想知道的是以这种方式做事的理论,惯用和实际的反对意见.这是一个F#势利的人会嗤之以鼻吗?这个(面向对象的实现)明显违反了一些函数式编程经验法则吗?这种方法是否已被证明会在大规模应用中引起问题?如果是这样,为什么/如何?

pho*_*oog 5

也许这是一个错误,"Visual Studio不会因为[你]编写利用这种观察的代码而抱怨".请参阅在C#中使用F#选项类型

对链接问题的答案中的评论说明:

从规范的8.13.1节:如果属性成员同时具有getter和setter,并且两者都不是索引器,那么getter和setter的签名必须表示相同的属性类型