Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 奇怪的未定义方法[],但调试时没有错误_Ruby_Ruby 2.2 - Fatal编程技术网

Ruby 奇怪的未定义方法[],但调试时没有错误

Ruby 奇怪的未定义方法[],但调试时没有错误,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
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