5

有没有更好的方法从长序列的递归函数调用中返回?我目前对这样的标记值感到恐慌:

type exitNow int
...
panic(exitnow(0))

一次返回多个级别。在根函数中,对 recovery 的调用执行一般错误处理(将恐慌转变为错误)并将 exitNow 作为特殊情况处理。

这很好用,我只想知道是否有更好的方法。

我已经将 bool 返回值用于相关目的,但为此使用另一个返回值会很痛苦。(对每个函数的每次调用都需要一个 if 语句)

如果它有帮助的话,这是一个递归体面解析器的实施的一部分。

4

1 回答 1

3

我自己在解析器中使用这种方法。不过,我不会对整数值感到恐慌。我使用实际的当前错误作为恐慌信息。执行的顶级调用recover()只是附加一些文件/行/列信息,然后将其作为常规返回error

这种方法,并且只从所有函数返回错误是在 Go 中执行此操作的唯一方法。对于解析器的情况,panic 方法要有效得多,因为它使词法分析器规则的实现(和阅读)变得相当简单,因为到处都没有if err != nil { return }散落的部分。

于 2012-11-30T18:26:02.177 回答