f# - F# 中用于矩阵运算检查的复合测量单位

标签 f# units-of-measurement

测量单位的严重用例之一是矩阵运算: 矩阵 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/

相关文章:

f# - 为什么 "do...while"在 F# 中不存在

swift - 在 swift 4 中将 UnitVolume.metricCups 转换为分数

android - Android 中测量单位的国际化

javascript - 如何找到这个数字的CSS单位

f# - when 守卫是识别元组中的项目是否在模式匹配中具有相同值的唯一方法吗?

sql-server - 连接到 Azure 中的 SQL 数据库时对象名称 'syscomments' 无效

F# 叉管

oop - 内部和私有(private)有什么区别

f# - 如何在 F# 中创建没有度量的度量记录类型

r - 将单位缩写转换为数字