2016-06-19 2 views
5

Bitte beachten Sie den folgenden Code.Wenn eine Funktion mit Seq-Typ-Parameter ein Datensatzfeld ist, akzeptiert sie keine Liste oder kein Array mehr

let x = Seq.head [1.0; 2.0] // This is ok. 

type Func<'T> = { f: seq<'T> -> 'T } 

let func = { f = Seq.head } 

// Compilation error: This expression was expected to have type seq<obj> but here has type 'a list 
let y = func.f [1.0; 2.0] 

let z = func.f ([1.0; 2.0] |> List.toSeq) // This is ok. 

Ich verstehe nicht, warum Seq.head und fund.f Verhalten anders hier. Es sieht für mich wie ein Compilerfehler aus. Wenn dies jedoch beabsichtigt ist, kann mir jemand helfen, mir ein bisschen zu erklären? Danke vielmals!

Antwort

6

Die unten ist die Antwort von Don Syme (github.com/fsharp):

Das ist von Entwurf. Die Regel "14.4.3 Implizite Flexibilitätseinfügung für die Verwendung von Funktionen und Membern" wird nur auf die Verwendung von Funktionen und Membern angewendet, nicht auf die Verwendung von Datensatzfeldern.

Verwandte Themen