我正在尝试创建一个可以同时接受整数和浮点数作为参数的函数。问题在于,尽管使用了 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)
我可以创建两个单独的函数,但这有点令人失望。有没有解决的办法?
您需要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)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |