F# 按位运算符和度量单位

F# Bitwise operators and units of measure

提问人:LA.27 提问时间:8/25/2023 最后编辑:LA.27 更新时间:8/29/2023 访问量:79

问:

当我在代码中定义度量单位时,我可以毫无问题地对带有该单位的值使用基本的算术运算符,例如

type [<Measure>] m

let a = 1<m>
let b = 2<m>
(* no problem *)
let result = a + b

但是,我不能使用按位运算符:

type [<Measure>] m

let a = 1<m>
let b = 2<m>
(* error: The type 'int<m>' does not match the type 'int' *)
let result = a &&& b

有没有办法使按位运算符与度量单位兼容?

.NET 泛型 f# 按位运算符 度量单位

评论


答:

3赞 Michael Samoilenko 8/29/2023 #1

F# 度量单位与 &&&(按位 AND)、|||(按位 OR)和 ^^^(按位 XOR)。这样做的原因是,度量单位是一种静态类型检查功能,主要用于数值计算的安全性和正确性,并且这些类型不支持开箱即用的按位运算。

评论

0赞 LA.27 9/5/2023
如果我理解正确,它不是开箱即用的。还有什么比删除计量单位、应用按位运算符和恢复计量单位更好的吗?
1赞 Michael Samoilenko 9/6/2023
@LA.27,老实说,我只能看到那个解决方案