f# - 如果不能使用 op_Quotation 有什么意义?
问题描述
根据运算符重载的 F# 规范
<@ @> op_Quotation
<@@ @@> op_QuotationUntyped
与许多其他运算符一样给出。除非我遗漏了一些东西,否则我不相信我可以将它用于自定义类型,那么为什么要列出它呢?
解决方案
我认为你是对的,实际上没有办法将它们用作自定义运算符。我怀疑这些被视为运算符,以防这在语言的未来某个时候对某些聪明的新功能有用。
文档实际上只是解释了操作符的名称是如何编码的。对于非特殊运算符名称,F# 以系统的方式对其进行编码。对于页面中列出的那些,它有一个特别好听的名字。考虑这种类型:
type X() =
static member (<^><>) (a:int,b:int) = a + b
static member (<@ @>) (a:int,b:int) = a + b
如果您查看这些成员的姓名:
[ for m in typeof<X>.GetMembers() -> m.Name ]
您会看到第一个运算符编译为op_LessHatGreaterLessGreater
,而第二个运算符编译为op_Quotation
。所以这就是表格中提到的名字的来源——这可能很好,这在某处有记录,但我认为你是对的,这并不是特别有用!
推荐阅读
- android - 将捕获的图像从相机保存到自定义文件夹
- javascript - Jquery“滚动到底部”仅在第二次单击时触发
- asp.net-web-api - 如何最好地保护 Azure 函数调用的 Web API?
- javascript - React - 警告:无法在未安装的组件上调用 setState(或 forceUpdate)
- azure-devops - VSTS:为什么管道似乎是由同一个用户触发的?
- c# - WPF 使 ListView 高度与 Grid 行高相同
- java - 在应用程序中监听通知通道的变化
- java - 为什么在排序列表上运行快速排序时仍然有交换?
- javascript - VueJS 良好实践:动画只显示一组元素中的一个
- eclipse - 增加 Papyrus 中的工作空间大小