F#中的内联关键字问题

Trouble with inline keyword in F#

我正在尝试创建一个可以将整数和浮点数作为参数的函数。问题在于尽管使用了 inline 关键字,编译器还是会根据函数中的数字自动推断出类型。这就是我的意思:

(* Infers ints for every parameter because of '1' *)
let inline Lerp a b t = (1 - t) * a + t * b
(* Infers floats for every parameter because I added '.0' to '1' *)
let inline Lerp' a b t = (1.0 - t) * a + t * b

我可以创建两个单独的函数,但有点令人失望。有解决办法吗?

您需要 LanguagePrimitives.GenericOne,对于任何原始数字类型或任何具有名为 'One':

的静态成员的类型,它解析为值 'one'
let inline Lerp a b t =
  (LanguagePrimitives.GenericOne - t) * a + t * b

Lerp 1 2 3 |> printfn "%A"         // 4
Lerp 1.1 2.2 3.3 |> printfn "%A"   // 4.73