首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参数多态性与亚型多态性F#

参数多态性与亚型多态性F#
EN

Stack Overflow用户
提问于 2012-09-28 22:45:45
回答 1查看 1.5K关注 0票数 2

这两个F#类型签名之间有什么区别(如果有)?

代码语言:javascript
复制
UseTheStream<'a when 'a :> Stream> : 'a -> unit

代码语言:javascript
复制
UseTheStream : (stream : Stream) -> unit

在这种情况下,它们的意思是一样的吗?

关于(:>)类型约束,msdn有以下说明

代码语言:javascript
复制
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.

这将表明这两个签名表达的是同一件事。那么在功能上,它们有什么不同呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-28 22:51:09

它们是不同的。最重要的是,第一个函数是泛型的。在您的示例中,这可能无关紧要,但如果类型参数影响函数的返回类型,它就会影响:

代码语言:javascript
复制
let UseTheStream (stream: #Stream) = stream
let UseTheStreamStrict (stream: Stream) = stream

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

s1MemoryStreams2Stream

注意:#T'U when 'U :> T的缩写。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12642253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档