如何一般删除 F# 测量单位

发布于 2024-07-10 19:07:03 字数 499 浏览 6 评论 0原文

我有一些数据操作代码,最后会输出 csv 。

我开始升级它以在各处​​添加测量单位,但现在我的 csv 函数出现问题:(

val WriteCSV : string -> 'a list array -> 'b list -> string -> unit

参数是文件名、列数组、列标题、分隔符)

我之前将 [|s;x;y|] 发送到的位置WriteCSV,我现在遇到问题,因为我无法发送[|skm; xmm; 嗯|]。

我尝试编写一个函数来一般删除测量单位,但它不起作用。

let removeUnit (n:float<_>) = n/1.0<_>

我的问题是:

  • 为什么它不起作用?
  • 可以让它发挥作用吗?
  • 还有其他方法可以解决这个特定问题吗?

I've got some data manipulation code which spits out csv at the end.

I started upgrading it to add units of measure everywhere, but I now have a problem with my csv function:

val WriteCSV : string -> 'a list array -> 'b list -> string -> unit

(the parameters are fileName, column array, column headers, separator)

Where I previously sent [|s;x;y|] to WriteCSV, I now have a problem, because I can't send [|skm; xmm; ymm|].

I tried writing a function for generically removing units of measure, but it doesn't work.

let removeUnit (n:float<_>) = n/1.0<_>

My questions are:

  • Why doesn't it work?
  • Can it be made to work?
  • Is there another way to solve this particular problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

很糊涂小朋友 2024-07-17 19:07:03

如果我解决了你的问题,将其转换为“纯”浮动会删除该单位。
例如:

[<Measure>] type m
[<Measure>] type km

let removeUnit (x:float<_>) =
    float x

let foo = removeUnit 2.6<m>
let foo2 = removeUnit 2.1<km>

val removeUnit : float<'u>; -> 浮动

If I got your Problem right, casting it to "pure" float removes the Unit.
For Example:

[<Measure>] type m
[<Measure>] type km

let removeUnit (x:float<_>) =
    float x

let foo = removeUnit 2.6<m>
let foo2 = removeUnit 2.1<km>

val removeUnit : float<'u> -> float

双马尾 2024-07-17 19:07:03

另一种方法是使用 LanguagePrimitives.FloatWithMeasure 函数。

例如:

let removeUnit (x: float<'u>) =
  x / (LanguagePrimitives.FloatWithMeasure<'u> 1.0)

它的类型签名为:

val removeUnit: x: float<'u> -> float

Another way of doing this is to use the LanguagePrimitives.FloatWithMeasure function.

For example:

let removeUnit (x: float<'u>) =
  x / (LanguagePrimitives.FloatWithMeasure<'u> 1.0)

This has a type signature of:

val removeUnit: x: float<'u> -> float
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文