Вызов Seq.skip и Seq.take в F#

По-видимому, метод делает что-то и просто не возвращается?

Принятие дело обстоит так, тогда:

  1. , Если это изменяет состояние, он - объект владельца, тогда необходимо протестировать это состояние, измененное правильно.
  2. , Если это берет в некотором объекте в качестве параметра и изменяет тот объект, тогда Ваш, должен протестировать объект, правильно изменяется.
  3. , Если это выдает исключения, определенные случаи, протестируйте это, те исключения правильно выдаются.
  4. , Если его поведение варьируется на основе состояния его собственного объекта или некоторого другого объекта, задает состояние и тестируют метод, имеет корректный Ithrough один из этих трех методов тестирования выше).

, Если youy сообщают нам то, что делает метод, я мог быть более конкретным.

9
задан Joel Mueller 5 March 2010 в 01:19
поделиться

2 ответа

И 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 }
7
ответ дан 4 December 2019 в 06:30
поделиться

Я знаю, что это старый вопрос, но на случай, если кто-то встретит его при поиске, как это делал я:

Вы можете использовать Seq .truncate , если вам нужно не более n элементов. Это не вызовет исключения, если доступно менее n элементов.

24
ответ дан 4 December 2019 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: