也许是一个愚蠢的问题,但为什么返回值unbox出现(在我的 F# Interactive 会话中)被键入为而obj不是具体类型int?据我所知(尝试应用 C# 中的现有知识),如果它是键入的,obj那么它仍然是装箱的。示例如下:
> (unbox<int> >> box<int>) 42;;
val it : obj = 42
> 42;;
val it : int = 42
Run Code Online (Sandbox Code Playgroud)
函数组合(f >> g) v意味着g (f (v)),所以你实际上是box<int>在最后调用(并且调用unbox<int>不是必需的):
> box<int> (unbox<int> 42);;
val it : obj = 42
> box<int> 42;;
val it : obj = 42
Run Code Online (Sandbox Code Playgroud)
类型为box : 'T -> obj和unbox : obj -> 'T,因此函数在装箱(对象)和值类型(int)之间进行转换。您可以调用,因为 F#在调用函数时unbox<int> 42会自动插入从int到 的转换。obj