Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
当引发 Ruby 异常时,我知道我可以使用该caller方法生成删除当前方法调用的回溯:
caller
raise SomeException, "error message", caller
根据镐的书,这“在库模块中通常很有用”。
为什么要从堆栈跟踪中删除当前方法?似乎我可以获得的关于错误发生的确切位置的信息越多,就越容易追踪。
对我来说似乎有用的原因是堆栈跟踪可以最清楚地向库的用户指出问题的根源。我的Programming Ruby并没有提供比你更多的洞察力,但是The Ruby Programming Language证实了我的感受:
我们在这里提出的异常的目的是指出调用 ... 方法的问题,而不是方法内部的代码。...如果我们想直接指向问题代码,我们可以提供自定义堆栈跟踪作为raisewith ...的第三个参数caller。
raise