没有方法错误的Ruby未识别方法

时间:2015-11-10 21:23:23

标签: ruby null each

我试图运行此代码:

def get_linedict(filename,source)
`dwarfdump -l #{source} > dwarfline.txt`
linefile = File.new("dwarfline.txt","r")

match = false

linefile.readlines.each do |line|
    puts line
    if /uri:/ =~ line
        file = line.match(/.*\/(.*)"/)[1]
        if file == filename
            match = true
        end
        puts file
        puts match
    end
end

当我这样做时,我收到以下错误:

assn4.rb:12:in `block in get_linedict': undefined method `[]' for nil:NilClass (NoMethodError)
from assn4.rb:9:in `each'
from assn4.rb:9:in `get_linedict'
from assn4.rb:126:in `block in <main>'
from assn4.rb:80:in `each'
from assn4.rb:80:in `<main>'

如果我将每个循环更改为只打印它读取的行,它就可以正常工作。据我了解,我得到的错误来自于nil不应该出现的错误,但如果错误来自每个循环,为什么我能打印出文件?

2 个答案:

答案 0 :(得分:0)

我想在调用所需数组的元素之前,首先要询问line.match是否得到了什么。

line.match(/.*\/(.*)"/)[1]

答案 1 :(得分:0)

当您致电line.match(/.*\/(.*)"/)时,结果为nil。然后,您尝试以nil身份访问Array。那是你得到undefined method []' for nil:NilClass的时候。

至于你问题的这一部分

  

但如果该错误来自每个循环,为什么我能打印出文件?

每个循环都会导致代码失败并在发生错误时暂停。由于您尝试在错误之后打印file ,因此实际上您不会在循环的迭代中打印出file

请注意,line可能不是nil。您的正则表达式可能只是没有涵盖您认为的所有情况,因此其中一个match调用失败并返回nil