私はF#を学んでいますが、この言語で型推論とジェネリックスがどのように機能するかを理解していません。たとえば、ジェネリックmin関数を宣言し、さまざまなタイプのパラメーターで使用できます。
let min a b = if a < b then a else b
let smallestInt = min 3 5
let smallestFloat = min 3.0 5.0
しかし、タイプで同じことを試してみると、機能しません。
type Point2D(x, y) =
member this.X = x
member this.Y = y
let float32Point = new Point2D(0.0f, 1.0f)
let intPoint = new Point2D(0, 1) // This expression was expected to have type
// float32 but here has type int
だから、私はいくつかの質問があります:
- 型定義ではなく、異なる型のジェネリック関数定義を再利用できるのはなぜですか?
- 関数は、C#ジェネリックのように、実行時にすべてのタイプに特化していますか?または、C ++テンプレートのようにコンパイル時に?または、すべての引数をIComparableとして扱うためにボクシングが実行されますか?
ありがとう。