Die Fehlermeldung beschreibt das Problem - in F #, list<list<'a>>
ist nicht kompatibel mit seq<seq<'a>>
.
Die upcast
Funktion hilft dieses Problem umgehen, indem a
in eine list<seq<float>>
machen, die dann mit seq<seq<float>>
kompatibel:
let a = [upcast [4.]]
Test.func(a)
Edit: Sie können in den Typen func
flexibler machen sie akzeptiert. Das Original akzeptiert nur Sequenzen von seq<'a>
. Auch wenn list<'a>
implementiert seq<'a>
, die Typen sind nicht identisch, und der Compiler gibt Ihnen einen Fehler.
Sie können jedoch func
ändern Sequenzen jeglicher Art zu akzeptieren, solange diese Art seq<'a>
implementiert, durch den inneren Typ wie #seq
schreiben:
type Test() =
static member func (a: seq<#seq<'a>>) = 5.
let a = [[4.]]
Test.func(a) // works
Und warum ist es so? Wenn Sie schreiben "let func (a: seq <'a seq>) = 5." dann funktioniert es ohne irgendwelche Upcasting. –
Ich bekomme den gleichen Fehler - http://gist.github.com/497844 –
Mein Fehler. Du hast recht. Haben Sie eine Erklärung warum für 'let func (a: float seq) = 5.' wir müssen nicht upcasting machen und für seq seq müssen wir das tun? –