区分 Pony 中不同类型的错误?

Dav*_*ven 3 ponylang

Pony 有一个未参数化的异常值。

不幸的是,我经常有代码想要抛出不同类型的异常,我需要知道它们是什么以便正确处理它们——例如,简单地说,当停止程序时,向用户提供正确的错误消息很重要!

那么在 Pony 中这样做的惯用方法是什么?

小智 5

目前惯用的方法是不使用错误,而是使用正常返回类型和错误原因的联合类型。例如,如果您有一个返回的函数,ReturnType并且可以使用Error1或出错Error2,则您的函数签名可以是

fun foo(): (ReturnType | Error1 | Error2)
Run Code Online (Sandbox Code Playgroud)

然后调用者函数必须match在联合上查看发生了什么。

如果你想要一些真实世界的例子,files标准库的包广泛使用这个习语。

此外,为了完整性,目前正在讨论关于添加类型错误的RFC