gpt4 book ai didi

exception - 如何处理这个异常呢?

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

Haskell 今天让我头疼。我想处理一个异常。当它到达顶部时,它会打印如下:

*** 异常:../p/trip/Trip.hs:(88,16)-(89,50):函数 split 中的非详尽模式

对我来说,它看起来像是 PatternMatchFail,但这不起作用:

handle (\(PatternMatchFail _) -> return env) f

我的意思是,它可以编译,但不处理异常。我究竟做错了什么?这是错误的异常(exception)还是什么?有没有办法捕获异常?

最佳答案

如果无法修复错误源,您应该查看以下内容: http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Exception.html

我相信使用“handle”或“try”或“catch”或Control.Exception中的任何内容是这里的关键,标准前奏中的函数仅处理IO异常,而不处理纯代码中的错误。

在Haskell98中,纯代码无法处理异常。纯函数必须有返回值,没有返回值是异常(exception)。

示例:

import qualified Control.Exception as C
x ::String
x = undefined
y = "return value"

main = do C.handle (\_ -> return "caught") (C.evaluate x) >>= print
C.handle (\_ -> return "caught") (C.evaluate y) >>= print

对evaluate的调用是强制对x和y求值,haskell是懒惰的。

如果您将 x 的计算推迟到稍后(懒惰地),则该异常也将在稍后的不同位置抛出(在本例中是使用该值的“print”),而该位置可能不会抓到了。

关于exception - 如何处理这个异常呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/411651/

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