我们可以在f#中创建类的方式存在这种二分法,这确实让我感到困扰。我可以使用隐式格式或显式格式创建类。但是我想要的某些功能仅可用于隐式格式,而某些功能仅可用于显式格式。
例如:

  • 我不能在显式定义的类中使用let inline *(或单独使用let)。
  • 在隐式定义的类内定义不可变的公共(public)字段(不是属性*)的唯一方法(我知道)是val bla : bla语法。
    但是这里有一个冗余。由于我将得到两个相同的不可变数据的副本,因此一个私有(private),一个公共(public)(因为在隐式模式下,构造函数参数在整个类存在期间一直存在)
  • (不太相关)使用属性进行方法重载和使用字段的默认值的需求不大。

  • 无论如何,我可以解决这个问题吗?
    *出于性能原因
    编辑:事实证明我对这两点都错了(谢谢Ganesh Sittampalam和MichaelGG)。
  • 虽然我不能在隐式和显式类定义中都使用let inline,但我可以很好地使用member inline,我认为它可以做同样的事情。
  • 显然,对于最新的F#,不再存在任何冗余,因为在类主体中未使用的任何参数对于构造函数都是本地的。
  • 下一F#版本中的
  • Will be gone
  • 最佳答案

    这可能无济于事,但是您可以使成员成为嵌入式成员。 “成员内联私有(private)”效果很好。

    关于f# - 关于F#面向对象的编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1212569/

    10-13 03:02