F# 缺陷Seq.take 10效果良好,Seq.take 100不';行不通
第一行工作正常,但第二行出现错误:输入序列的元素数量不足。 是的,没有100个元素,它们只有3个,但是为什么10个元素可以工作呢 毕竟它在C上是有效的#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相同的行为。你最好仔细检查一下。将你的在线测试与此进行比较
在示例中,根本不执行秒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);
}}