【发布时间】:2015-04-28 05:18:06
【问题描述】:
我定义了自己的测量单位来表示弧度:
[<Measure>]
type rad
然后我意识到有一个价值,例如float<rad> 类型的许多函数我不能使用 System.Math 中定义的许多函数(因为它们使用“普通”浮点数)
let valueWithUnit = 5.45<rad>
let absValue = Math.Abs valueWithUnit // <--- error!!
我创建了一段幼稚的代码,它允许函数也处理 float<rad> 值:
let liftToRadFunc (f : float -> float) (arg : float<rad>) =
arg * 1.</rad>
|> f
|> (*) 1.<rad>
let result = (liftToRadFunc Math.Abs) valueWithUnit // <--- now works fine
但它的问题是它完全不是通用的。假设我也想引入一个单位来表示学位 - 那么呢?我需要复制代码并将所有单位从“rad”更改为“deg”吗?或者也许有更好的解决方案?
【问题讨论】:
标签: generics f# units-of-measurement