【发布时间】:2010-02-03 15:01:33
【问题描述】:
我发现:
abs -10
abs -10L
两者都有效。所以想知道F#是如何实现的,并在源代码中进行了搜索:
type AbsDynamicImplTable<'T>() =
let AbsDynamic x = AbsDynamicImplTable<_>.Result x
[<CompiledName("Abs")>]
let inline abs (x: ^T) : ^T =
AbsDynamic x
when ^T : ^T = absImpl x
我对这些感到困惑。
据我所知,在abs 这样的函数中,我们必须将输入与 0 进行比较,并且不同类型有不同的 0。
谢谢。
【问题讨论】:
-
您不必将 X 与 0 进行比较即可找到其绝对值 - 您可以将其与 -X 进行比较。
-
@Simon 似乎是个好主意。但是,你的方法不正确。考虑 x=-2147483648。
-
是的,好点子 - 虽然我怀疑在这种情况下你会得到同样的异常来评估 -X 因为 abs() 无论如何都应该抛出。