F# 中内联关键字的问题

tig*_*ros 4 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
Run Code Online (Sandbox Code Playgroud)

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

bri*_*rns 8

您需要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
Run Code Online (Sandbox Code Playgroud)