Ruby 奇怪的未定义方法[],但调试时没有错误
我已经在rubyRuby 奇怪的未定义方法[],但调试时没有错误,ruby,ruby-2.2,Ruby,Ruby 2.2,我已经在rubyruby 2.2.1p85(2015-02-26修订版49769)[x86\u 64-darwin14]和(Rails 4.2.5.2) 但是,如果我在该行中放置一个调试器断点(我使用binding.pry),并运行同一行,它就会工作。调用者是一个本机Ruby方法,它以字符串数组的形式返回当前执行堆栈。我遇到的问题是,当我的代码在控制台中运行时,其中一行是: "(pry):7:in `<main>'" 我使用的常规表达式[/\/(?:(?!\/)+$/]预计会捕获文
ruby 2.2.1p85(2015-02-26修订版49769)[x86\u 64-darwin14]
和(Rails 4.2.5.2)
但是,如果我在该行中放置一个调试器断点(我使用binding.pry),并运行同一行,它就会工作。
调用者
是一个本机Ruby方法,它以字符串数组的形式返回当前执行堆栈。我遇到的问题是,当我的代码在控制台中运行时,其中一行是:
"(pry):7:in `<main>'"
我使用的常规表达式[/\/(?:(?!\/)+$/]
预计会捕获文件名,因为该行没有返回的文件名nil
,而b[-1..2]
由于b
为`nil>而引发错误
当我调试调用者
变量时,在binding.pry
执行时间上被替换,使代码正常工作
以下是我修复代码以使其正常工作的方法:
def log_method_backtrace
backtrace = []
(4..8).map do |i| # 4 because before is ... map, log_method_backtrace...
line = caller[i]
b = line[/\/(?:.(?!\/))+$/] || line
b = b[1..-2]
b = b.sub(':in `', '#')
backtrace << "#{b} <- "
end
log "(Method called from #{backtrace.join})"
end
def log\u方法\u回溯
回溯=[]
(4..8)地图是我做的,因为以前是。。。映射,日志\u方法\u回溯。。。
line=呼叫者[i]
b=行[/\/(?:(?!\/)+$/]|行
b=b[1..-2]
b=b.sub(':in`,'#')
回溯你能展示调用方方法的代码吗?它显然在某些时候返回nil。你是如何解决这个问题的?
"(pry):7:in `<main>'"
/...../gems/pry-0.9.12.6/lib/pry/pry_instance.rb:328:in `eval'
def log_method_backtrace
backtrace = []
(4..8).map do |i| # 4 because before is ... map, log_method_backtrace...
line = caller[i]
b = line[/\/(?:.(?!\/))+$/] || line
b = b[1..-2]
b = b.sub(':in `', '#')
backtrace << "#{b} <- "
end
log "(Method called from #{backtrace.join})"
end