首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >F# unbox<int>返回obj

F# unbox<int>返回obj
EN

Stack Overflow用户
提问于 2011-08-06 00:17:01
回答 2查看 1.4K关注 0票数 2

也许这是一个愚蠢的问题,但是为什么来自unbox的返回值(在我的F#交互会话中)看起来是obj类型的,而不是具体的int类型?据我所知(试图应用来自C#的现有知识),如果它的类型是obj,那么它仍然是装箱的。示例如下:

代码语言:javascript
复制
> (unbox<int> >> box<int>) 42;;
val it : obj = 42
> 42;;
val it : int = 42
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-06 00:19:21

函数组合(f >> g) v的意思是g (f (v)),因此您实际上是在最后调用box<int> (而对unbox<int>的调用并不是必需的):

代码语言:javascript
复制
> box<int> (unbox<int> 42);;
val it : obj = 42

> box<int> 42;;
val it : obj = 42

类型是box : 'T -> objunbox : obj -> 'T,因此函数在装箱类型(对象)和值类型(整型)之间进行转换。您可以调用unbox<int> 42,因为F#在调用函数时会自动插入从intobj的转换。

票数 4
EN

Stack Overflow用户

发布于 2011-08-06 03:07:58

在相关的注释中:这种方法实际上非常有用。我用它来处理"the type of an object expression is equal to the initial type"行为。

代码语言:javascript
复制
let coerce value = (box >> unbox) value

type A = interface end
type B = interface end

let x = 
  { new A
    interface B }

let test (b:B) = printf "%A" b

test x //doesn't compile: x is type A (but still knows how to relax)
test (coerce x) //works just fine
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6959374

复制
相关文章

相似问题

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