繁体   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