在F#中,后增运算符是否不可重载?

3
我正在为C#开发人员编写一个库。该库是用F#编写的。C#开发人员希望在其中一个对象上使用 ++ 运算符。我该如何实现?
我在网上查找发现,在F#中没有 ++ 后增量运算符。

2
由于变量的不可变性,++ 在 F# 中没有意义。而且,希望公开自定义 ++ 运算符似乎是共享库的一个奇怪要求。我很想看看你的 API 是什么样子的。 - Phillip Scott Givens
@PhillipScottGivens 我的一个API是性能计数器包装器。对于计数器“传入连接数”,当有一个传入连接时,它必须增加一。如果这个细节不够,请告诉我。 - fahadash
感谢澄清。以下是我的建议,供参考。我更喜欢使用描述性的方法而不是神奇的操作符。同时,我也希望看到实例方法而不是静态方法(因为操作符必须是静态的)。 - Phillip Scott Givens
我知道有两种人。那些接受了神奇的运算符并试图将它们改成可读性更好的东西,以及那些试图将它们改成可读性更好的东西。 我是开放的,没有站队。顺便说一下,我正在对++运算符定义进行一个巧妙的技巧,它不会真正创建一个新对象,而是修改现有对象并返回其引用。你认为这有什么问题吗? - fahadash
1个回答

8

尽管F#没有++运算符,但你仍然可以定义一个支持它的F#类型:

type A(n:int) = 
  member x.N = n
  static member op_Increment (a:A) = A(a.N + 1)

关键在于你必须使用op_Increment这个名称来命名方法,因为这是C#用于++运算符的名称。不幸的是,F#不理解这个运算符,所以如果你写member (++) ...,编译器会调用op_PlusPlus方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接