首页 > 解决方案 > 如果不能使用 op_Quotation 有什么意义?

问题描述

根据运算符重载的 F# 规范

<@ @>   op_Quotation
<@@ @@> op_QuotationUntyped

与许多其他运算符一样给出。除非我遗漏了一些东西,否则我不相信我可以将它用于自定义类型,那么为什么要列出它呢?

标签: f#operator-overloading

解决方案


我认为你是对的,实际上没有办法将它们用作自定义运算符。我怀疑这些被视为运算符,以防这在语言的未来某个时候对某些聪明的新功能有用。

文档实际上只是解释了操作符的名称是如何编码的。对于非特殊运算符名称,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。所以这就是表格中提到的名字的来源——这可能很好,这在某处有记录,但我认为你是对的,这并不是特别有用!


推荐阅读