Es ist in F # durchaus möglich. F # ist zuerst funktional, nicht rein funktional - und das ist eine seiner großen Stärken. F # ist pragmatisch und dieses Konstrukt unten ermöglicht es, genau das gleiche Ergebnis zu erzielen, auch wenn der Typ KnownParsing
nicht in Java oder C# -Sequenzen "verschachtelt" ist.
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 sind nützlich für die Schnittstellen oder abstrakte Klassen Umsetzung, aber die „Eltern“ Klasse (die, die ein Objekt Ausdruck schafft) nicht in der Lage sein, den Zugriff auf seine Einbauten. Oder, genauer gesagt, es gibt keine Möglichkeit, andere Einbauten als Interface/Abstract-Member auf andere Weise als über Ref-Zellen außerhalb des Objektausdrucks selbst zu erstellen. Dies hat Auswirkungen auf die Leistung, wie GC-Druck für Ref-Zellen.
Siehe this Beispiel in meinem Open-Source-Projekt darüber, wie Objektausdrücke und "geschachtelt über und" Typen austauschbar für IEnumerator
Implementierung funktionieren. Auf this line verwende ich private
Typ wie in dieser Antwort und es funktioniert gut. Im ganzen Projekt verwende ich F # in meist imperativer Weise, da dies der einzige Weg ist, anständige Leistung zu bekommen. Und ich muss sagen, ich mag F # am häufigsten über C#, auch für Imperativ-Code.
[F # unterstützt Klasse Verschachtelung nicht] (http://stackoverflow.com/questions/8948332/why-doesnt-f-support-nested-classes). – vcsjones
In der funktionalen Programmierung denkt man zuerst an Funktionen, in OO denkt man zuerst an Objekte. Sie denken Objekt, wenn Sie denken sollten, Funktion. Denken Sie daran, wie ich einen öffentlichen Funktionsdatensatz() erstellen kann, der eine versteckte Funktion KnownParsing() hat. Eine Funktion innerhalb einer anderen Funktion ist im Wesentlichen privat. –
Warum alle Downstimmen? Das klingt nach einer vernünftigen Frage. – Mathias