[英]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
s1
是MemoryStream
。 s2
是Stream
。
注意: #T
是'U when 'U :> T
简写。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.