2

これら2つのF#型シグネチャの違い(ある場合)は何ですか?

UseTheStream<'a when 'a :> Stream> : 'a -> unit

UseTheStream : (stream : Stream) -> unit

この場合、それらは同じことを意味しますか?

msdnは、(:>)タイプ制約について次のように述べています

type-parameter :> type --   The provided type must be equal to or derived from the type      specified, or, if the type is an interface, the provided type must implement the interface.

これは、2つの署名が同じことを言っていることを示します。機能的には、それらはどのように異なりますか?

4

1 に答える 1

15

彼らは違う。最も重要なのは、最初の関数が汎用であるということです。あなたの例ではおそらく問題ではありませんが、typeパラメーターが関数の戻り型に影響を与える場合は次のようになります。

let UseTheStream (stream: #Stream) = stream
let UseTheStreamStrict (stream: Stream) = stream

let s1 = new MemoryStream() |> UseTheStream
let s2 = new MemoryStream() |> UseTheStreamStrict

s1ですMemoryStreams2ですStream

注:#Tはの省略形です'U when 'U :> T

于 2012-09-28T14:51:08.540 に答える