3

我读过StrangeLights的简介,我读过 Expert F# 的文章(第 119 页),但我看不出它们如何应用于我的代码:

对于我的测试,我想检查浮点数之间的相等性,并有一点宽容。我正在将所有内容转换为度量单位,但我希望能够成为“通用”:

let toleq (e:float<_>) a b = (abs ( a - b ) ) < e

然后我可以使用它来检查不同“类型”浮点数的相等性,或者将其咖喱制作一个自定义的:

toleqm = toleq 1.0e-10<m>

但我收到以下消息:

Type inference has inferred the signature
    val toleq : float<'u> -> float<'u> -> float<'u> -> bool
Either define 'toleq' as a simple data term, make it a function, or add a 
    type constraint to instantiate the type parameters.

我看不出我还能做些什么来使它成为一个函数——我看不到任何隐式参数。

这是怎么回事?

4

1 回答 1

2

好吧,我搞砸了一点,绝望地找到了解决方案,但我不确定我是否理解为什么......

let toleq (e:float<_>) (a:float<_>) (b:float<_>) = (abs ( a - b ) ) < e

呃,它几乎和 C# 中的泛型声明一样丑陋。

于 2009-01-06T13:31:50.410 回答