f# - F# 中自定义运算符的优先级
问题描述
我正在尝试创建类似于 (&&) 和 (||) 的运算符,并且具有相同的优先级。
我的代码是:
let (&&.) = (&&)
let (||.) = (||)
printf $"{true ||. true &&. false} = {true || true && false}"
这将打印“False = True”。
据我了解,在 F# 中,自定义运算符的优先级由它们的第一个字符定义。为什么我会得到这个输出,我该如何解决?
解决方案
我认为这是按预期工作的。根据此表 &&
,优先级高于||
, 但&&.
和||.
具有相同的优先级(如&op
和的实例|op
)。
要修复它,您可以为自定义“and”函数选择优先级更高的运算符,如下所示:
let (^^.) = (&&)
let (||.) = (||)
printf $"{true ||. true ^^. false} = {true || true && false}" // "true = true"
推荐阅读
- vue.js - Vue:动态类中的数组长度条件
- pytorch - 如何理解mbart中的decoder_start_token_id和forced_bos_token_id?
- javascript - 使用 JQuery 修改和删除 CSS 类属性
- ssl - Hashicorp 的 Vault CLI 不在令牌助手中存储身份验证令牌
- kotlin - 无法从适配器类向另一个活动发送数据
- javascript - 如何在 VScode 中使用文档对象模型 (DOM)?
- struct - srcpy和struct问题,动态数组新增struct book记录
- python-3.x - 是否可以控制函数如何将 np.array 向量化为参数?
- javascript - 当使用 babel.config.js 以及在 webpack babel 加载器中指定选项时,它会合并两者还是忽略 babel.config.js?
- amazon-web-services - 如何在开发环境中的 Magento 2 中将 localstack 用作 S3?