Ich habe Stackoverflow (und andere Quellen) gesucht für diese Antwort, aber kann nicht scheinen, nichts zu finden.F # Extention Methoden auf Listen, IEnumberable, etc
In C#, wenn ich eine Widget Definition habe, sagen:
class widget
{
public string PrettyName() { ... do stuff here }
}
und ich wollte für einfaches Drucken einer Liste von Widgets ermöglichen, könnte ich dies tun:
namespace ExtensionMethods
{
public static PrintAll(this IEnumerable<Widget> widgets, TextWriter writer)
{
foreach(var w in widgets) { writer.WriteLine(w.PrettyName()) }
}
}
Wie würde ich etwas Ähnliches mit einem Datensatztyp und einer Sammlung erreichen (List oder Seq vorzugsweise in F #). Ich würde gerne eine Liste von Widgest haben und in der Lage, eine Funktion direkt an der Sammlung zu nennen, die so etwas wie dies taten. Es sei angenommen, (da es F #), dass die Funktion nicht den Zustand der Sammlung sich ändern würde, dass es angebracht ist, aber einige neue Wert zurück.
Wie würde ich die Funktion printAll als Mitglied im Widget Datensatztyp für die Verwendung in dem obigen Szenario definieren? – fbl
@ flevine100 - Sie würden normalerweise _not_ definieren printAll als Mitglied an einem Typ, sondern als let gebundene Funktion in einem Modul. Ich habe meine Antwort so bearbeitet, dass sie ein Beispiel enthält. – kvb
danke! - Functional Programming ist definitiv eine andere Art zu denken über Code-Organisation. – fbl