用外行的说法,除了历史原因之外,模式匹配的好处到底是什么?我遇到的答案大多超出了我的水平(例如,我不了解与此相关的堆分配)。
我有Python的背景,只是最近才再次接触Haskell。
所以我很难理解在其他语言中给出的其他答案。
使用模式匹配而不是条件匹配的最有用的方面之一是允许仅涉及total操作的API,即永远不会导致运行时异常/错误的操作。
考虑此代码,利用假设函数runOperationOn
,返回Maybe String
。
case runOperationOn someData of
Just res -> putStrLn ("The operation was successful: " ++ res)
Nothing -> putStrLn "The operation failed!"
这里,模式匹配允许检查操作是否成功并获得成功结果,同时。最后一部分至关重要。使用布尔值,我们需要使用类似以下内容:
if canRunOperationOn someData
then putStrLn ("The operation was successful: " ++ doRunOperationOn res)
else putStrLn "The operation failed!"
这看起来很相似,但是与模式匹配相比有很多缺点:
doRunOperationOn
,该函数返回一个String
,但是在无效输入时会崩溃。 后者非常糟糕,因为它给程序员带来了负担,程序员必须记住问“我可以吗?”,否则就有崩溃的危险。