在Ruby中与PERL Carp->cluck($msg)等效的方法是什么?

4

Perl有一个名为Carp的模块,可以用来打印消息(不需要显式地引发异常),它会打印消息和完整的堆栈跟踪。

use Carp qw(cluck) ;
cluck ("foo")

将会产生:

foo called from file bar, line 2

有什么想法可以在Ruby中实现类似的功能吗?
1个回答

4

您可以使用Kernel#caller_locations来实现此功能(http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-caller_locations)

def cluck(val)
  loc = caller_locations.last
  puts "#{val} called from file #{loc.path}, line #{loc.lineno}"
end

cluck 1
cluck "hello"

输出:

1 called from file line_of_caller.rb, line 6
hello called from file line_of_caller.rb, line 7

loc这里是Thread::Backtrace::Location的一个实例,因此您也可以从中获取更多信息;请查看http://www.ruby-doc.org/core-2.0.0/Thread/Backtrace/Location.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接