我正在学习 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?
谢谢。