错误? Seq.take 10效果很好,Seq.take 100不起作用

时间:2011-04-04 12:46:05

标签: f# sequence take

let a = [1;2;3;]

for i in (a |> Seq.take 10) do Console.WriteLine(i)
for i in (a |> Seq.take 100) do Console.WriteLine(i)

第一行效果很好,但第二行产生错误:输入序列的元素数量不足。

是的,没有100个元素,它们只有3个,但为什么10个有效呢?

Online test

毕竟它适用于C#

using System;
using System.Linq;

class P
{ static void Main() {

 var p = new[] {1,2,3,4};

 foreach(var i in p.Take(10).ToArray()) Console.WriteLine(i);
 foreach(var i in p.Take(2).ToArray()) Console.WriteLine(i);
 foreach(var i in p.Take(100).ToArray()) Console.WriteLine(i);
}}

Online test

3 个答案:

答案 0 :(得分:8)

打印出3个元素,然后打印出错误信息。

答案 1 :(得分:6)

其他答案已经解释了你的错误(我推荐trying not to jump to conclusions about compiler bugs,你可能会被投票)。此外,您将Seq.take与Enumerable.Take进行比较,但they don't have the same behavior。但是,Seq.truncate 与Enumerable具有相同的行为.Take

答案 2 :(得分:4)

样本中的

第二个for循环根本不执行。第一个输出1 2 3然后抛出异常