F#编译器错误FS0030,值限制问题
-
03-07-2019 - |
题
我已经在 StrangeLights ,我已经从专家那里读过段落 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.
我看不出我怎样才能使它成为一个函数 - 我看不到任何隐含的参数。
怎么了?
解决方案
好吧,我慌了一下,绝望地找到了解决办法,但我不确定我理解为什么......
let toleq (e:float<_>) (a:float<_>) (b:float<_>) = (abs ( a - b ) ) < e
呃,它几乎和C#中的泛型声明一样难看。
不隶属于 StackOverflow