gpt4 book ai didi

Haskell - "How can I use "if”语句在 "do" block 中正确吗?

转载 作者:行者123 更新时间:2023-12-02 10:04:48 25 4
gpt4 key购买 nike

Possible Duplicate:
Haskell “do nothing” IO, or if without else

这些“简单”的行出了问题......

action = do
isdir <- doesDirectoryExist path -- check if directory exists.
if(not isdir)
then do handleWrong
doOtherActions -- compiling ERROR here.

GHCi 会提示标识符,或者在我添加 else do 后不执行最后一行操作.

我认为异常处理可能有效,但是在这种常见的“检查并执行某些操作”语句中是否有必要?

谢谢。

最佳答案

Haskell 中的

if 必须始终有一个 then 和一个 else。所以这会起作用:

action = do
isdir <- doesDirectoryExist path
if not isdir
then handleWrong
else return () -- i.e. do nothing
doOtherActions

同样,您可以使用 Control.Monad 中的 when:

action = do
isdir <- doesDirectoryExist path
when (not isdir) handleWrong
doOtherActions

Control.Monad 也有除非:

action = do
isdir <- doesDirectoryExist path
unless isdir handleWrong
doOtherActions
<小时/>

请注意,当您尝试时

action = do
isdir <- doesDirectoryExist path
if(not isdir)
then do handleWrong
else do
doOtherActions

它被解析为

action = do
isdir <- doesDirectoryExist path
if(not isdir)
then do handleWrong
else do doOtherActions

关于Haskell - "How can I use "if”语句在 "do" block 中正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5920888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com