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

如何找出Ruby中调用该方法的行号?,ruby,metaprogramming,Ruby,Metaprogramming,让我们举一个简单的例子: def funny_function(param) lineNumber = __LINE__ # this gives me the current line number puts lineNumber end 我们可以看到,我可以得到当前的行号。然而,我的问题是,是否有一种非侵入性的方法来确定该方法是从哪个行号(甚至是一个文件)调用的? 非侵入性意味着我不想让方法用户知道这一点,她只需提供param参数,例如: funny_function 'Haha

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

def funny_function(param)
  lineNumber = __LINE__  # this gives me the current line number
  puts lineNumber
end
我们可以看到,我可以得到当前的行号。然而,我的问题是,是否有一种非侵入性的方法来确定该方法是从哪个行号(甚至是一个文件)调用的?

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

funny_function 'Haha'

可能类似于调用方。\uuuu行\uuuu?

您可以使用最近添加的
调用方位置。它返回一个
Location
对象数组。有关详细信息,请参阅

无需解析调用方的返回。万岁


若要添加到此
调用方位置。首先
调用方位置(0)
获取最后一个方法位置,请增加参数以提取特定步骤。

若要获取ast函数调用的行
调用方[0]。扫描(/\d+/)。首先

def func0
  func1
end

def func1
  func2
end


def func2
  func3
end

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

func0

这是您所追求的吗?

调用方
方法的响应有什么问题?
调用方
返回当前执行堆栈,格式为:
file:line:in`method'
。这有什么不对?只是不想解析iTunes使用caller_位置可以避免解析字符串。@pascalbetz我不知道,我后来看到了你的答案,这更好。我只是没有编辑我的答案,因为它是有效的,而且它提供了一种替代方法。另外,我不想解释你的答案。是的,这个方法是最近才添加的。据说它的性能更高。不,他正在寻找调用该方法的行号。
def b
  puts "world"
end

def a
  puts "hello"
end

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