Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 缺陷Seq.take 10效果良好,Seq.take 100不';行不通_F#_Sequence_Take - Fatal编程技术网

F# 缺陷Seq.take 10效果良好,Seq.take 100不';行不通

F# 缺陷Seq.take 10效果良好,Seq.take 100不';行不通,f#,sequence,take,F#,Sequence,Take,第一行工作正常,但第二行出现错误:输入序列的元素数量不足。 是的,没有100个元素,它们只有3个,但是为什么10个元素可以工作呢 毕竟它在C上是有效的# 在示例中,根本不执行秒for循环。第一个输出1 2 3,然后抛出异常它打印出3个元素,然后打印出错误消息。其他答案解释了您的错误(我建议您可能会被否决)。另外,您正在比较Seq.take和Enumerable.take,但是。但是,Seq.truncate确实具有与Enumerable相同的行为。你最好仔细检查一下。将你的在线测试与此进行比较

第一行工作正常,但第二行出现错误:输入序列的元素数量不足。

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

毕竟它在C上是有效的#


在示例中,根本不执行秒for循环。第一个输出1 2 3,然后抛出异常

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

其他答案解释了您的错误(我建议您可能会被否决)。另外,您正在比较Seq.take和Enumerable.take,但是。但是,Seq.truncate确实具有与Enumerable相同的行为。你最好仔细检查一下。将你的在线测试与此进行比较:它已经在第一个循环中失败了。在失败之前,它只打印前3个元素。@Joachim Sauer。。。是的,我已经理解了。我认为这里的否决票有点不友好,OP犯了一个简单的错误,但花了时间把问题记录好,显然是在尝试F,并指出了接受F和C的区别。输出把我弄糊涂了,我想让x=Enumerable.Take myList 5一定能用。+1用于链接到一篇提到
Seq.truncate
的博客文章,它做了OP期望的
Seq.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)
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);
}}