让我们举一个简单的例子:
def funny_function(param)
lineNumber = __LINE__ # this gives me the current line number
puts lineNumber
end
我们可以看到,我可以获得当前的行号。但是,我的问题是,是否有一种非侵入性的方式来找出调用该方法的行号(甚至是文件)?
非侵入性意味着我不希望方法用户知道这一点,她只需要提供param
参数,例如:
funny_function 'Haha'
也许像caller.__LINE__
?
答案 0 :(得分:4)
您可以使用最近添加的caller_locations
。它返回一个Location
个对象的数组。有关详细信息,请参阅http://ruby-doc.org/core-2.2.3/Thread/Backtrace/Location.html。
无需解析caller
的回复。万岁。
要添加到此caller_locations.first
或caller_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]
这是你的事吗?