Was bedeutet # in Typensignaturen wie seq<#seq<'a>>
im Vergleich zu nur seq<seq<'a>>
?Was bedeutet # (Pfundzeichen) in Typ-Signaturen?
11
A
Antwort
19
Dies wird flexible Typ genannt. Die kurze Zusammenfassung ist, dass #type
bedeutet jeder Typ, der von type
vererbt wird. In Ihrem konkreten Beispiel wird seq<#seq<'a>>
eine Sequenz von beliebigen Sammlungen sein, die 'a
Werte enthalten.
Beim Aufruf einer Funktion werden mit F # betonierte Typen automatisch an Schnittstellen übergeben. Sie können also beispielsweise eine Funktion aufrufen, die seq<'a>
mit dem Array 'a[]
als Argument verwendet. Dies funktioniert jedoch nicht, wenn Sie ein Array von Arrays haben - weil 'a[][]
nur seq<'a[]>
, aber nicht seq<seq<'a>>
implementiert.
Zum Beispiel die folgenden beiden Funktionen geben Liste der Längen von verschachtelten Sequenzen:
[ [1]; [2;3] ] |> f1
// error FS0001: The type 'int list list' is not
// compatible with the type 'seq<seq<'a>>'
[ [1]; [2;3] ] |> f2
// val it : int list = [1; 2]
Siehe: http:
Aber nur die zweite kann auf Listen von Listen aufgerufen werden // msdn.microsoft.com/en-us/library/dd233228.aspx und speziell http://msdn.microsoft.com/en-us/library/dd233198.aspx. – rightfold