Aufruf von Seq.skip und Seq.take in F #

8
%Vor%

Aufruf von getIt () mit verschiedenen Offsets gibt mir schließlich eine 'Ungültige Operation'-Ausnahme mit zusätzlichen Informationen, dass' die Eingabefolge unzureichende Elemente hatte '

Ich versuche zu verstehen, warum, da sowohl Seq.Skip als auch Seq.take keine Ausnahme gemäß der Online-Dokumentation erzeugen FSharp Sammlungen

Version: (Visual Studio 2010) Beta 1

    
Moonlight 08.08.2009, 02:28
quelle

5 Antworten

21

Ich weiß, das ist eine alte Frage, aber für den Fall, dass jemand bei einer Suche auf die Art und Weise auftaucht, wie ich es tat:

Sie können Seq.truncate verwenden, wenn Sie höchstens n Elemente. Es wird keine Ausnahme ausgelöst, wenn weniger als n Elemente verfügbar sind.

    
Joel Mueller 05.03.2010 01:16
quelle
6

Sowohl Seq.skip als auch Seq.take werfen diese Ausnahme, wenn sie mit einem Wert größer als die Sequenz aufgerufen werden. Sie können den Quellcode in Seq.fs überprüfen, um zu sehen, warum:

%Vor%     
Dustin Campbell 08.08.2009 02:46
quelle
1

Für eine ausnahmslose skip können Sie Ihre eigene Version wie folgt dem Seq-Modul hinzufügen:

%Vor%

Kombiniert mit Seq.truncate (was ein ausnahmsloses Seq.take entspricht - es werden so viele Elemente benötigt, ohne eine Ausnahme auszulösen).

%Vor%     
krdx 15.08.2014 14:02
quelle
1

Hier ist eine etwas kürzere "skipSafe" Implementierung mit eingebauten Funktionen:

%Vor%

Oder wenn Sie es direkt in Ihre aktuelle Pipeline einfügen möchten, ersetzen Sie

%Vor%

mit

%Vor%     
user3908642 01.03.2016 21:27
quelle
0
%Vor%     
Sergii 12.04.2016 10:23
quelle

Tags und Links