【发布时间】:2018-03-05 06:22:58
【问题描述】:
我在 C# (LibC) 和 F# (LibF) 代码都使用的公共库 (LibRoot) 中定义了一个带有度量单位的记录类型。
然后,我在 F# 库 (LibF) 使用的 C# 库 (LibC) 中编写了一个公共 API。但是任何时候我试图将一个对象传递给这个 API F# 都会抱怨它必须有一个度量单位。
//LibRoot - F#
type Vec2<[Measure] 'u> = {
X : int
Y : int
}
//LibC - C#
public static class Funcs
{
public void DoWork(Vec2 vec) { //no measure needed in C#
....
}
}
//LibF - F#
open LibC
let myVec : Vec2<1> = { X = 123; Y = 456 }
DoWork(myVec) //FS0001
错误 FS0001:类型不匹配。期望 'Vec2' 但给定了 'Vec2' 元组有 0和1的不同长度
我试过了:
-
Vec2<1>:FS0001 -
Vec2<0>: 类型中的文字无效 -
Vec2<()>: 类型中出现意外的 ')' -
Vec2<_>:FS0001 -
Vec2<unit>:预期的计量单位,而不是类型 -
(Vec2) myVec:没有可用于类型 'Vec2 的构造函数
有人知道以互操作友好的方式构造测量记录类型的方法吗?
【问题讨论】:
-
可能做不到,编译后计量单位信息基本丢失。
标签: f# interop records units-of-measurement