Um eine Folge von meiner Klasse zu erstellen,F # - Kann ich den Typnamen als Funktion verwenden, die als Standardkonstruktor fungiert?
type MyInt(i:int) =
member this.i = i
[1;2;3] |> Seq.map(fun x->MyInt(x))
wo fun x->MyInt(x)
überflüssig zu sein scheint. Es wäre besser wenn ich schreiben könnte Seq.map(MyInt)
Aber ich kann nicht. Eine Abhilfe, die ich denken kann, ist eine separate Funktion zu definieren
let myint x = MyInt(x)
[1;2;3] |> Seq.map(myint)
Gibt es einen besseren Weg, dies zu tun?
Ihre Definition von 'New' kompiliert für mich in der VS11 Beta nicht. Eine einfachere Variante heißt jedoch: 'lass Inline New x = (^ t: (neu:^u ->^t) x)'. – kvb
Ich habe das zuerst versucht, aber mit expliziten Einschränkungen '^ t wenn^t: (neu:^u ->^t) 'was in VS2010 nicht kompiliert wird. Freut mich zu wissen, dass es einen einfacheren Weg gibt, dies zu tun. – Daniel
Seltsamerweise unterstützt der Compiler nur explizite Constructor-Constraints der Form 'new: unit -> 't' (die direkt in .NET-Metadaten dargestellt werden können), aber Sie können offensichtlich general constructor constraint _invocation expressions_ verwenden und den Compiler auf die Constraints schließen lassen . Es ist definitiv ein kleines Loch im System. – kvb