通用度量单位/匹配问题

  • 本文关键字:问题 单位 度量 f#
  • 更新时间 :
  • 英文 :


我已经阅读了很多关于度量单位的资源(包括好的Microsoft Doc和f#(,但我仍然无法使我的代码正常工作。

[<Measure>] type USD
[<Measure>] type JPY
[<Measure>] type EUR
type FxUnit<[<Measure>] 'u,[<Measure>] 'v> = {UnitRate : float<'u/'v>}
let getFx1 u  =
match u with
| "USD" -> {UnitRate = 1.0<USD/USD>}
| "EUR" -> {UnitRate = 1.0<USD/EUR>}

这样我得到一个错误下:

1.0<USD/EUR>

我试过了:

let getFx1  u : (float<'u>) =
let getFx1  u : (float<'u/'v>) =

但没有取得多大成功。似乎在匹配的情况下,我无法返回具有不同计量单位的FxUnit类型。

你知道我该怎么解决吗?

谢谢。

问题在于,您正试图定义一个函数,该函数接受字符串并返回类型为FxUnit<USD,USD>FxUnit<USD,EUR>的值。一个函数不能有两种不同的返回类型,这是在运行时决定的。

您可以使FxUnit采用有区别并集的两个值,而不是度量:

type Currency =
| USD
| JPY
| EUR
type FxUnit = { UnitRate : float; From : Currency; To : Currency }
let getFx1 u  =
match u with
| "USD" -> {UnitRate = 1.0; From = USD; To = USD}
| "EUR" -> {UnitRate = 1.0; From = USD; To = EUR}
| _     -> failwithf "Unrecognised units %s" u

最新更新