По-видимому, метод делает что-то и просто не возвращается?
Принятие дело обстоит так, тогда:
, Если youy сообщают нам то, что делает метод, я мог быть более конкретным.
И Seq.skip, и Seq.take вызовут это исключение, если они вызываются со значением, превышающим последовательность. Вы можете проверить исходный код в Seq.fs, чтобы понять, почему:
let skip count (sequence: seq<_>) =
{ use e = sequence.GetEnumerator()
let latest = ref (Unchecked.defaultof<_>)
let ok = ref false
for i in 1 .. count do
if not (e.MoveNext()) then
raise <| System.InvalidOperationException "the input sequence had insufficient elements"
while e.MoveNext() do
yield e.Current }
let take count (sequence : seq<'T>) =
if count < 0 then invalidArg "count" "the number of elements to take may not be negative"
(* Note: don't create or dispose any IEnumerable if n = 0 *)
if count = 0 then empty else
{ use e = sequence.GetEnumerator()
for i in 0 .. count - 1 do
if not (e.MoveNext()) then
raise <| System.InvalidOperationException "the input sequence had insufficient elements"
yield e.Current }
Я знаю, что это старый вопрос, но на случай, если кто-то встретит его при поиске, как это делал я:
Вы можете использовать Seq .truncate , если вам нужно не более n элементов. Это не вызовет исключения, если доступно менее n элементов.