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"
我正在尝试创建类似于 (&&) 和 (||) 的运算符,并且具有相同的优先级。
我的代码是:
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"