2011-12-28 8 views
5

F#アプリケーションの開発では、タイプがLazy<'T>であるタイプがあります。F#プロパティとC#プロパティの比較

明らかに、F#はプロパティの構文糖を処理する方法の一つの興味深い副作用は(しゃれを許し)(C#の方法とは対照的に)プロパティのゲッターとセッターは、異なるを受け入れる/返すことができるということですタイプ。

let lazyValue = lazy 0 

member this.Value 
    with get() = 
     lazyValue.Value 
    and set _lazyVal = 
     lazyValue <- _lazyVal 

...ような値:(。私はこの観察を活用するコードを記述するとVisual Studioが文句を言っていない。少なくとも、)

をたとえば、私はこれを行うためには、それが有利です。 intを返しますが、のみを受け取ります。Lazy<int>です。

このようにして、理論的、慣用的、そして実用的な異論があります。 F#snobが彼の鼻を上げてくれる何か?この(オブジェクト指向の実装)が明らかに違反しているいくつかの機能プログラミング規則がありますか?これは、大規模アプリケーションで問題を引き起こすことが実証されているアプローチですか?もしそうなら、なぜ/どのように?

+3

これはF#コンパイラのバグです.F#仕様では違法と言われています。 F#の将来のバージョンではこれが機能しなくなることを期待してください。 : - ] – ildjarn

答えて

5

おそらく、「この見解を利用するコードをVisual Studioが書いていると不平を言っていません」というバグです。 Using F# Option Type in C#

リンク質問ノートへの答えにコメントを参照してください:仕様のセクション8.13.1から

:プロパティのメンバーはゲッターとセッターの両方を持っていないし、どちらもインデクサであれば、 getterとsetterの両方のシグネチャは、同じプロパティタイプを暗示する必要があります。

関連する問題