我想寫抽象到Console.ReadLine()函數轉換成字符串序列F#如何抽象到Console.ReadLine()作爲字符串SEQ
的序列應該打破時線= NULL
ConsoleLines(): unit -> string seq
使用方法如下:
for line in ConsoleLines() do
DoSomething line
如何編寫此函數?
感謝
我想寫抽象到Console.ReadLine()函數轉換成字符串序列F#如何抽象到Console.ReadLine()作爲字符串SEQ
的序列應該打破時線= NULL
ConsoleLines(): unit -> string seq
使用方法如下:
for line in ConsoleLines() do
DoSomething line
如何編寫此函數?
感謝
Seq.initInfinite (fun _ -> Console.ReadLine())
它並不過分漂亮,但它按預期工作:
let rec ConsoleLines() =
seq {
match Console.ReadLine() with
| "" -> yield! Seq.empty
| x -> yield x; yield! ConsoleLines()
}
let ConsoleLines =
seq {
let finished = ref false
while not !finished do
let s = System.Console.ReadLine()
if s <> null then
yield s
else
finished := true
}
(請注意,您必須使用REF//:!=做一個序列表達式中的可變狀態。)
let consoleLines = Seq.takeWhile ((<>) "") (seq { while (true) do yield System.Console.ReadLine() })
稍有不同:
let readLines (sr:TextReader) =
Seq.initInfinite (fun _ -> sr.ReadLine())
|> Seq.takeWhile (fun x -> x <> null)
let consoleLines() =
readLines Console.In