Während ich tiefer in die neueste Version von F # eindringe, habe ich versucht, es mit PLINQ interagieren zu lassen. Mir ist allerdings aufgefallen, dass die beiden Code-mäßig nicht sehr schön zusammenspielen. In der Tat ist es nicht möglich sein, Code zu schreiben, wie die folgenden:F # und PLINQ Erweiterungsmethoden
open System.Linq
let someArray = [|"abc"; "def"|]
someArray.AsParallel().Count(new Func<_,_>(fun s -> s.Length = 3))
weil die Erweiterungsmethoden für ParallelQuery in der System.Linq.ParallelEnumerable Klasse enthalten ist offenbar nicht von F # zu abgeholt.
Ich wäre nicht überrascht, wenn überhaupt keine Unterstützung für Erweiterungsmethoden wäre, aber da ich auf die für IEnumerable definierte Erweiterungsmethode someArray.Count zugreifen kann, frage ich mich, warum ich nicht auf die von PLINQ zugreifen kann.
Fehle ich etwas?
Ist dies eine F # -Begrenzung? Wenn ja, ist das Design? Wenn nicht, wird es in einer zukünftigen Version angesprochen werden?
Obwohl man nicht wählen kann, weil seine Signatur ist ('T ->' U-Option) -> 'T-Array ->' U-Array haben Sie mir die Lösung: Geben Sie den Typ in AsParallel. Tatsächlich sieht es so aus, als würde die nicht-generische Version zurückgegeben. Schließlich weiß ich, dass Seq, Array und andere Module in F # bevorzugt sind, aber unter verschiedenen Umständen könnte man eher mit etwas anfangen, das kein Array ist, oder etwas wollen, das Array.Parallel nicht bietet. – em70
Mein schlechtes, das wird nicht tun. Während nach der Verwendung von AsParallel die Erweiterungsmethoden abgeholt werden, kann der Compiler die richtige Überladung nicht auflösen, so dass es nutzlos ist :( –
em70
Ich entschuldige mich für den Array.choose Fehler.Ich habe das kurz nachdem ich gepostet habe entdeckt, aber du hast es gefunden, bevor ich es auf die korrekte Version bearbeitet habe. ;) FYI-in F #, das Seq-Modul beschäftigt sich mit jedem IEnumerable und der Seq-Typ ist synonym mit IEnumerable. –