首页 > 解决方案 > F# 中自定义运算符的优先级

问题描述

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

我的代码是:

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

这将打印“False = True”。

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

标签: f#operators

解决方案


我认为这是按预期工作的。根据此表 &&,优先级高于||, 但&&.||.具有相同的优先级(如&op和的实例|op)。

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

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

在此处输入图像描述


推荐阅读