新手问题 再请问个 caller 的问题

p0p3 · 2013年07月02日 · 最后由 night_song 回复于 2013年07月04日 · 2561 次阅读

programming ruby 中

raise ArgumentError,"Name too big",caller 上述这个例子从栈回溯信息中删除当前函数,这在程序库模块中十分有用。可以更进一步:下面的代码通过只将调用栈的子集传递给新异常,从而达到从栈回溯信息中删除两个函数的目的 raise ArgumentError,"Name too big",caller[1..-1]

想问下,从栈回溯信息中删除当前函数,在程序库模块中有什么用啊

作用是方便使用者找到真正出错的地方

这个作用我知道,我意思使用了 caller 都把异常点和调用他的方法在栈回溯中删掉了,这样做的目的是什么

#2 楼 @p0p3 例如标准库的测试模块的 assert 就是要修改 caller 的, assert 不对就会扔出 AssertionError, 但显示的栈里就不没必要把 assert 方法包括进来

https://github.com/ruby/ruby/blob/trunk/lib/test/unit/assertions.rb

需要 登录 后方可回复, 如果你还没有账号请 注册新账号