Arn*_*hor 14 f# design-patterns functional-programming
CLI应用程序的常用模式是在无限循环中运行,直到用户键入一些quit命令.比如,在C语言中:
while(1){
scanf("%c", &op);
...
else if(op == "q")
break;
}
Run Code Online (Sandbox Code Playgroud)
F#中这种控制台应用程序的模式是什么(尝试使用尾递归,但失败了)?
des*_*sco 10
在浏览器中输入,可能包含错误:
let rec main() =
let c = System.Console.ReadKey()
if c.Key = System.ConsoleKey.Q then () // TODO: cleanup and exit
else
// TODO: do something in main
main()
Run Code Online (Sandbox Code Playgroud)
gra*_*bot 10
这是一个无阻塞版本,响应单键按下.
open System
let rec main() =
// run code here
// you may want to sleep to prevent 100% CPU usage
// Threading.Thread.Sleep(1);
if Console.KeyAvailable then
match Console.ReadKey().Key with
| ConsoleKey.Q -> ()
| _ -> main()
else
main()
main()
Run Code Online (Sandbox Code Playgroud)
这样的功能很有用:
let rec forever f =
f()
forever f
Run Code Online (Sandbox Code Playgroud)
用法:
forever <| fun () ->
//function body
Run Code Online (Sandbox Code Playgroud)
但是,对代码进行更直接的翻译将是:
while true do
//body
Run Code Online (Sandbox Code Playgroud)