这是代码:
main :: IO()
main = do
{
putStrLn ("Meniu: ");
putStrLn ("1. menu 1");
putStrLn ("2. menu 2");
putStrLn ("3. menu 3");
putStrLn ("4. menu 4");
putStrLn ("5. Exit - Iesire)");
putStrLn ("-------------------------");
putStr ("Enter option: ");
opt <- getLine;
if(opt == "1") then do
{
Code one etc
main
}
else if(opt == "2") then do
{
Code 2 etc
main
}
else if(opt == "3") then do
{
code 3 etc
main
}
else if(opt == "4") then do
{
code 4 etc
main
}
else if(opt == "5") then do
{
??????????? ()
}
else putStrLn "Option is not exist";
}
问题:
在选项5 (opt == 5)
中,我需要制作一个代码来停止菜单,但我不知道如何做到这一点。
我试图在Google和StackOverflow上找到更多示例,但我真的找不到解决方案。
答案 0 :(得分:9)
return ()
将在这里工作。在这种情况下,return
实际上就像在过程语言中一样(但请注意, 通常是真的)。
关于样式的注意事项:具有相等比较的if
... else
的链在Haskell中是非常不恰当的。正确的方法是case
:
main = do
putStrLn "Meniu: "
sequence_ [ putStrLn $ [n]++". menu "++[n] | n<-['1'..'5'] ]
putStrLn "-------------------------"
putStr "Enter option: "
opt <- getLine
case opt of
"1" -> do
Code one etc
main
"2" -> do
Code 2 etc
main
"3" -> do
code 3 etc
main
"4" -> do
code 4 etc
main
"5" -> return ()
_ -> putStrLn "Option does not exist"
如果正确缩进代码,则不需要大括号和分号。
这里return ()
的作用简单......根本没有,这是无操作。由于main
在case
切换后结束,如果您不像其他选项那样递归回main
,程序也会结束。