簡體   English   中英

參數多態性與亞型多態性F#

[英]Parametric Polymorphism vs Subtype polymorphism F#

這兩個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.

這表明兩個簽名正在說同樣的話。 從功能上來說,它們有何不同?

他們是不同的。 最重要的是,第一個功能是通用的。 在您的示例中,它可能無關緊要,但如果type參數影響函數的返回類型,它會:

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

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

s1MemoryStream s2Stream

注意: #T'U when 'U :> T簡寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM