我只是想知道如何以与 F# 正确交互的方式编写用户定义的平方根函数 (sqrt)单位制 http://blogs.msdn.com/andrewkennedy/archive/2008/09/04/units-of-measure-in-f-part-three-generic-units.aspx.
它应该是什么样子:
let sqrt (x : float<'u ^ 2>) =
let x' = x / 1.0<'u ^ 2> // Delete unit
(x ** 0.5) * 1.0<'u> // Reassign unit
但这是不允许的,因为非零常数不允许有通用单位.
有没有办法写这个函数?随着内置sqrt
它工作得很好,那么它有什么魔力呢?
允许非零泛型常量将很容易破坏单位类型系统的安全性(参见安德鲁·肯尼迪的papers http://research.microsoft.com/en-us/um/people/akenn/units/index.html)。我相信你最后一个问题的答案是sqrt
在某种意义上确实很神奇,因为不可能通过正常方式定义具有该类型签名的参数函数。然而,它is通过利用装箱和转换可以做你想做的事(至少在当前版本的 F# 中):
let sqrt (x : float<'u^2>) =
let x' = (float x) ** 0.5 (* delete unit and calculate sqrt *)
((box x') :?> float<'u>)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)