op_Quotation如果不能用有什么意义?
What is the point of op_Quotation if it cannot be used?
的 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
。所以这就是 table 中提及的名称的用武之地 - 在某处记录它可能很好,但我认为你是对的,这并不是特别有用!
<@ @> 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
。所以这就是 table 中提及的名称的用武之地 - 在某处记录它可能很好,但我认为你是对的,这并不是特别有用!