2

おそらくばかげた質問かもしれませんが、なぜからの戻り値unboxが(私のF#インタラクティブセッションで)obj具体的な型の代わりに型付けされているように見えるのintですか?私が理解できる限り(C#からの既存の知識を適用しようとしています)、それがそのように入力された場合obj、それはまだボックス化されています。例は次のとおりです。

> (unbox<int> >> box<int>) 42;;
val it : obj = 42
> 42;;
val it : int = 42
4

2 に答える 2

4

関数合成(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

型はbox : 'T -> objunbox : obj -> 'Tであるため、関数はボックス型 (オブジェクト) と値型 (int) の間で変換します。unbox<int> 42F# は関数を呼び出すときに からintへの変換を自動的に挿入するため、を呼び出すことができますobj

于 2011-08-05T16:19:20.723 に答える