我试图弄清楚如何定义一个适用于多种类型参数(例如 int 和 int64)的函数。据我了解,在 F# 中函数重载是不可能的(当然编译器会抱怨)。以下面的函数为例。
let sqrt_int = function
| n:int -> int (sqrt (float n))
| n:int64 -> int64 (sqrt (float n))
编译器当然会抱怨语法无效(似乎不支持模式匹配中的类型约束),尽管我认为这说明了我想要实现的目标:一个对多个参数类型进行操作并返回相应值的函数类型。我有一种感觉,在 F# 中使用泛型类型/类型推断/模式匹配的某种组合是可能的,但是语法让我无法理解。我也尝试过使用 :? 运算符(动态类型测试)和模式匹配块中的when子句,但这仍然会产生各种错误。
由于我对这门语言相当陌生,我很可能在这里尝试做一些不可能的事情,所以如果有替代解决方案,请告诉我。