如何找出Ruby中调用方法的行号?

时间:2016-06-01 09:39:39

标签: ruby metaprogramming

让我们举一个简单的例子:

def funny_function(param)
  lineNumber = __LINE__  # this gives me the current line number
  puts lineNumber
end

我们可以看到,我可以获得当前的行号。但是,我的问题是,是否有一种非侵入性的方式来找出调用该方法的行号(甚至是文件)?

非侵入性意味着我不希望方法用户知道这一点,她只需要提供param参数,例如:

funny_function 'Haha'

也许像caller.__LINE__

3 个答案:

答案 0 :(得分:4)

您可以使用最近添加的caller_locations。它返回一个Location个对象的数组。有关详细信息,请参阅http://ruby-doc.org/core-2.2.3/Thread/Backtrace/Location.html

无需解析caller的回复。万岁。

要添加到此caller_locations.firstcaller_locations(0)获取最后一个方法位置,请递增参数以提取特定步骤。

答案 1 :(得分:1)

要获取ast函数的行,请调用caller[0].scan(/\d+/).first

def func0
  func1
end

def func1
  func2
end


def func2
  func3
end

def func3
  p caller[0].scan(/\d+/).first
end

func0

答案 2 :(得分:1)

def b
  puts "world"
end

def a
  puts "hello"
end

p method(:a).source_location
=> ["filename.rb", 5]

这是你的事吗?