F# 中自定义运算符的优先级

Precedence of custom operators in F#

我正在尝试创建类似于 (&&) 和 (||) 的运算符,并且具有相同的优先级。

我的代码是:

let (&&.) = (&&)
let (||.) = (||)
printf $"{true ||. true &&. false} = {true || true && false}"

这将打印“False = True”。

据我了解,在 F# 中,自定义运算符的优先级由它们的第一个字符定义。 为什么我会得到这个输出,我该如何解决?

我认为这是按预期工作的。根据 this table && 的优先级高于 ||,但 &&.||. 具有相同的优先级(作为 &op|op).

要修复它,您可以为自定义“and”函数选择一个优先级更高的运算符,如下所示:

let (^^.) = (&&)
let (||.) = (||)
printf $"{true ||. true ^^. false} = {true || true && false}"   // "true = true"