2014-04-23 9 views
9

Angesichts der folgenden:Passing F # Funktion IEnumerable.Where vs IEnumerable.All

open System.Linq 

let even n = n % 2 = 0 

let seqA = seq { 0..2..10 } 

dies ist ein gültiger Ausdruck:

seqA.Where(even) 

aber das ist nicht:

seqA.All(even) 

Warum ist even zu Where erlaubt, aber nicht zu All?

+0

Was wird die Fehlermeldung Sie bekommen? –

+1

Ich vermute, Sie haben einen Fehler entdeckt. Ich würde dies an [email protected] senden. – Daniel

+5

Dies scheint ein weiterer Fall von [dies] zu sein (http://stackoverflow.com/questions/12933366/f-func-type-inference-difference-between-seq-and-pseq-todictionary). Als Umgehungsmöglichkeit sollte 'seqA.All (System.Func <_,_> (gerade))' funktionieren, oder 'seqA.All (fun x -> even x)'. –

Antwort

1

Zwar gibt es einen Fehler sein kann, denke ich, der bessere Ansatz der Seq Funktionen höherer Ordnung zu verwenden wäre, wenn sie mit IEnumerable<T> in F # statt Linq

let even n = n % 2 = 0 
let seqA = seq { 0..2..10 } 

seqA |> Seq.filter even 
//val it : seq<int> = seq [0; 2; 4; 6; ...] 

seqA |> Seq.forall even 
//val it : bool = true 
Umgang