这两个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.这将表明这两个签名表达的是同一件事。那么在功能上,它们有什么不同呢?
发布于 2012-09-28 22:51:09
它们是不同的。最重要的是,第一个函数是泛型的。在您的示例中,这可能无关紧要,但如果类型参数影响函数的返回类型,它就会影响:
let UseTheStream (stream: #Stream) = stream
let UseTheStreamStrict (stream: Stream) = stream
let s1 = new MemoryStream() |> UseTheStream
let s2 = new MemoryStream() |> UseTheStreamStricts1是MemoryStream。s2是Stream。
注意:#T是'U when 'U :> T的缩写。
https://stackoverflow.com/questions/12642253
复制相似问题