は考える:F#でコンパイル時型のキャスト演算子を定義する方法は?
let ab = ArgumentBlockSettingStore()
let a = ab :> ISettingStore
よう
let ab, a = ~~ArgumentBlockSettingStore() : _ * ISettingStore
が可能となる(~~)
プレフィックス演算子を定義する方法はありますか?
は考える:F#でコンパイル時型のキャスト演算子を定義する方法は?
let ab = ArgumentBlockSettingStore()
let a = ab :> ISettingStore
よう
let ab, a = ~~ArgumentBlockSettingStore() : _ * ISettingStore
が可能となる(~~)
プレフィックス演算子を定義する方法はありますか?
私は、あなたがコメントで言及したコンパイラの制限にぶつかっていると思います。~~
演算子は完全に汎用的で安全な方法で書くことができません。つまり、引数が実装するインターフェイスにのみキャストできます。あなたはどの他の型にキャストします演算子を定義することができますが、それはあまり安全です:
let inline (~~) (a:^T) : ^T * ^R = a, (box a) :?> ^R
let reader, (disposable:IDisposable) = ~~(new StreamReader("..."))
は私が
inline
を使用し、オペレータは非常に簡単ですので、それは通常の事業者と同じように動作します。
disposable
の型名に
Random
を使用してもコンパイルされますが、少し不幸です。
タイプセーフではないにもかかわらずそれを行う方法。ありがとう:)私は1つの場所でのみそのようなキャスティングが必要なので私はそれを使用しないと思うが、私はそれが実装する可能性のある様々なインターフェイスすべてで使用するオブジェクトを宣言するきちんとした方法だと思う。また、1つのタイプ、2つのインターフェースなどのために~~~に拡張することもできます。 –
私はいくつかのコンパイラの制限事項に記載されているように見えます: http://stackoverflow.com/questions/4561663/rewrite-some-c-sharp-generic-code-into-f –