我试图在FSharp中编写一个类来懒惰地读取文本文件中的行并将它们转换为适当的Record类型。我的记录是多行,所以我使用Seq.take函数来一次拉出尽可能多的行 - 在这种情况下是4。
let readLines = seq {
while not inputStream.EndOfStream do
yield inputStream.ReadLine()
inputStream.Close()
}
let lineQuartet readLines = Seq.take 4 readLines
我遇到的问题是,当我用完线条而不是在那里结束时,我会得到空的seq,导致读者崩溃。
处理此问题的最佳方法是什么?
答案 0 :(得分:4)
有点不清楚你在问什么,但如果你想要一个比Seq.take
更“强大”的替代品,你可以使用Seq.truncate
:
let lineQuartet readLines = Seq.truncate 4 readLines
最多返回4个元素。
答案 1 :(得分:0)
这个问题也可以通过更容忍缺失元素的考虑来解决。
let tryTake n (sq : _ seq) =
let e = sq.GetEnumerator()
let i = ref 0
seq {
while e.MoveNext() && !i < n do
i := !i + 1
yield e.Current
}
(改编自this link)