测量单位的严重用例之一是矩阵运算: 矩阵 a*b 与 c*d 的内积仅在 b = c 等时有效...
但是,我没有看到任何“复合单元”的构造,例如所需的构造。
我们有办法让 F# 中的类型系统检查这一点吗?
最佳答案
免责声明:从手机发送 => 可能包含错误
我想说,这种检查可以通过使用 UoM 或 phantom types 以某种方式实现。 :
[<Measure>] type s
type M<[<Measure>]'w, [<Measure>] 'h>() =
static member (*) (a : M<'a, 't>, b : M<'t, 'b>) : M<'a, 'b> = failwith "NYI"
let x = M<s ^ 3, s ^ 3>()
let y = M<s ^ 3, s>()
let z = x * y // M<s ^ 3, s>
但是问题是:使用起来有多方便......
关于f# - F# 中用于矩阵运算检查的复合测量单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11277628/