gpt4 book ai didi

java - f# 公共(public)类中的私有(private)类

转载 作者:搜寻专家 更新时间:2023-10-31 08:22:19 24 4
gpt4 key购买 nike

我有一个 Java 类,我需要用 F# 编写一个类似的类。如何在 f# 中的 public 内部定义私有(private)类?

public class KnownRuleGoals {
void record() {
knownParsingSet.add(new KnownParsing());
}

private class KnownParsing {
Rule [] knownParsing;
KnownParsing() {
...
}
void doWork() { ... }
}
}

最佳答案

这在 F# 中是完全可能的。 F# 首先是功能性的,而不是纯功能性的——这是它的主要优势之一。 F# 是实用的,下面的这个构造可以让人们获得完全相同的结果,即使 KnownParsing 类型在 Java 或 C# 意义上不是“嵌套”的。

type KnownRuleGoals() =
let knownParsingSet : List<KnownParsing> = List()
member this.Record() =
knownParsingSet.Add(new KnownParsing())

and private KnownParsing() =
let foo = "private fields"
member this.DoWork() = failwith "TODO implementation"

Object expressions可用于实现接口(interface)或抽象类,但“父”类(创建对象表达式的类)将无法访问其内部结构。或者,更准确地说,除了通过对象表达式本身之外的引用单元之外,没有办法以任何方式创建接口(interface)/抽象成员以外的内部结构。这对性能有影响,例如引用单元的 GC 压力。

参见 this我的开源项目中的示例关于对象表达式和“nested via and”类型如何可互换地用于 IEnumerator 实现。在 this line我在这个答案中使用 private 类型并且效果很好。在整个项目中,我主要以命令方式使用 F#,因为这是获得良好性能的唯一方式。而且我必须说,我最喜欢 F# 而不是 C#,即使对于命令式代码也是如此。

关于java - f# 公共(public)类中的私有(private)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35003102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com