gpt4 book ai didi

exception - Haskell(ghc) Control.Exception中,try和catch的区别

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

全部!
我有点困惑。

库 Control.Exception 中的文档和代码之间是否存在不一致?

该文档说函数“catch”在处理函数上使用函数“mask”
但是函数 try 不使用函数掩码。

但是代码说函数“try”使用函数“catch”。

我认为
如果函数 'catch' 使用函数 'mask'
函数“try”使用函数“catch”,
然后函数'try'使用函数'mask'。

在 ghc base-package 的 Control.Exception 中,文档说

“在对 catch 系列函数之一的调用中,每个异常处理程序周围都有一个隐含的掩码。这是因为大多数时候这是你想要的——它消除了启动异常处理程序时的常见竞争条件,因为可能有如果一个异常立即到达,堆栈上没有异常处理程序来处理另一个异常。但是,如果在进入处理程序时屏蔽了异步异常,我们有时间在被中断之前安装一个新的异常处理程序。如果这不是默认值,人们会必须写一些类似的东西

  mask $ \restore ->
catch (restore (...))
(\e -> handler)

如果您需要在异常处理程序中再次取消阻止异步异常,也可以在那里使用恢复。

请注意,try 和friends 没有类似的默认值,因为在这种情况下没有异常处理程序。不要使用 try 从异步异常中恢复。 ”。

但是,代码说

"try a = catch (a >>=\v -> return (Right v)) (\e -> return (Left e))"

最佳答案

这条评论的意思是,如果你使用 try像这样:

e <- try act
case e of
Left e -> handleError e
Right r -> doSomething r

术语 handleError e 周围不会有面具,与 catch act handleError 的情况不同.

关于exception - Haskell(ghc) Control.Exception中,try和catch的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20159209/

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