有没有更好的方法从长序列的递归函数调用返回? 我目前对这样的标记值感到恐慌:
type exitNow int
...
panic(exitnow(0))
一次返回多个级别。在根函数中,对恢复的调用执行一般错误处理(将恐慌转为错误)并将exitNow作为特殊情况处理。
这很好,我只想知道是否有更好的方法。
我已经将bool返回值用于相关目的,但是使用另一个则会很痛苦。 (每次调用每个函数都需要一个if语句)
如果它有助于任何这是一个反复的正确解析器的实现的一部分。
答案 0 :(得分:3)
我在解析器中自己使用这种方法。不过我不会对整数值感到恐慌。我使用实际的当前错误作为恐慌消息。执行recover()
的顶级调用只会附加一些文件/行/列信息,然后将其作为常规error
返回。
这个方法,只是从所有函数返回错误是在Go中执行此操作的唯一方法。恐慌方法对于解析器案例来说非常有效,因为它使得词法分析器规则实现(和读取)相当简单,因为到处都没有if err != nil { return }
个散布的部分。