f# - 关于 F# 面向对象编程

标签 f# oop

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

  • 我无法使用 let inline * (或 let 单独)在显式定义的类中。
  • 定义不可变的唯一方法(我知道)公众 隐式定义的类中的字段(不是属性*)是 val bla : bla句法。
    但这里有一个冗余。因为我最终会得到相同不可变数据的两份副本,一份是私有(private)的,一份是公开的(因为在隐式模式下,构造函数参数在整个类存在期间都保持不变)
  • (不太相关)需要为方法重载和字段的默认值使用属性是相当令人讨厌的。

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

    这可能无济于事,但您可以使成员内联。 “成员(member)内联私有(private)”工作正常。

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

    相关文章:

    objective-c - 混合过程和面向对象的编程

    f# - FsUnit 示例错误

    c++ - 为什么即使不调用公共(public)复制构造函数也需要它?

    algorithm - 学习 F# - 打印质数

    F# 计量单位......有时间的例子吗?

    python - 在 Python 中有 sorted() 的神奇方法吗?

    c++ - 从文件中将对象读入数组,反之亦然

    javascript - 如何在 JavaScript 中模拟 "classes"? (有或没有第三方库)

    .net - 使用 Seq.cast 时出现问题

    f# - 在 ILMerge 中允许重复的泛型类型