在开发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#势利的人会嗤之以鼻吗?这个(面向对象的实现)明显违反了一些函数式编程经验法则吗?这种方法是否已被证明会在大规模应用中引起问题?如果是这样,为什么/如何?
也许这是一个错误,"Visual Studio不会因为[你]编写利用这种观察的代码而抱怨".请参阅在C#中使用F#选项类型
对链接问题的答案中的评论说明:
从规范的8.13.1节:如果属性成员同时具有getter和setter,并且两者都不是索引器,那么getter和setter的签名必须表示相同的属性类型
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |