我需要解析来自套接字的输入流。数据是从 Telnet 客户端发送的,因此我想通过在流中查找第一个
在这里应该如何处理
但我认为可能有一些漂亮的方法可以使用模式匹配和尾递归来完成。那么,如何以 F# 的方式完成这项工作?
'\r'
字符来处理传入字符串,然后选择回车字符之前的字节,并最终处理任何 backspace
'\b'
字符。在这里应该如何处理
'\b'
位呢?我目前正在使用可变堆栈并将字符推入其中,如果有退格,则弹出最后一个字符。然后将结果转换为字符串。但我认为可能有一些漂亮的方法可以使用模式匹配和尾递归来完成。那么,如何以 F# 的方式完成这项工作?
let receiveInput (inputBuffer:StringBuilder) (received:Tcp.Received)=
let text = Encoding.ASCII.GetString(received.Data.ToArray());
inputBuffer.Append(text) |> ignore
let all = inputBuffer.ToString()
match all.IndexOf('\r') with
| enter when enter >= 0 ->
let textToProcess = all.Substring(0,enter)
inputBuffer.Remove(0,enter+2) |> ignore
//this is the part I'm wondering about
let stack = new Stack<char>()
for c in textToProcess do
if c = '\b' then stack.Pop() |> ignore
else stack.Push c
let input = new System.String(stack |> Seq.rev |> Seq.toArray)
Some(input)
| _ ->
None
reduce
与fold
类似,但当输入为空时会崩溃。 - Mark Seemann