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

cnd*_*cnd 3 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)
Run Code Online (Sandbox Code Playgroud)

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

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

在线测试

毕竟它适用于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);
}}
Run Code Online (Sandbox Code Playgroud)

在线测试

Jef*_*ter 8

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


Mau*_*fer 6

其他答案已经解释了你的错误(我建议你不要跳到关于编译器错误的结论,你可能会被低估).此外,您将Seq.take与Enumerable.Take进行比较,但它们没有相同的行为.然而,Seq.truncate 确实有相同的行为Enumerable.Take